Tôi có một cột năm có chứa những thứ như 2013, 2012, v.v. Cột tháng hiển thị 1-12 và cột ngày có chứa 1-31. Tôi cần phải chạy một lựa chọn mà nối chúng và đúc chúng như là một ngày thực tế, nhưng tôi không chắc chắn làm thế nào để đi về điều này. Bất cứ ai có thể cung cấp một số đầu vào?Làm thế nào để biến các cột năm, tháng và ngày riêng biệt thành một ngày?
Trả lời
Đối với SQL Server 2008+:
SELECT CONVERT(DATE,CAST([Year] AS VARCHAR(4))+'-'+
CAST([Month] AS VARCHAR(2))+'-'+
CAST([Day] AS VARCHAR(2)))
Đối với SQL Server 2005:
SELECT CONVERT(DATETIME,CAST([Year] AS VARCHAR(4))+
RIGHT('00'+CAST([Month] AS VARCHAR(2)),2)+
RIGHT('00'+CAST([Day] AS VARCHAR(2)),2))
Cảm ơn bạn, đã hoạt động hoàn hảo. – user2361820
Tôi nghĩ bạn đã nói đây là một chức năng của Oracle? –
Bạn có thể thử một cái gì đó như thế này nếu các cột của bạn là cột nhân vật
Select Cast([year] + '-' + [month] + '-' + [day] as datetime)
From yourTable
Nếu họ là số bạn sẽ cần phải đúc mỗi cột để varchar trước khi nối nếu không bạn sẽ kết thúc nhận được someth ing sôi nổi
Nếu nó hoạt động hay không phụ thuộc vào cài đặt máy chủ. Hãy thử 'SET DATEFORMAT dmy; SELECT CAST ('2012-01-03' AS datetime)' cho một bất ngờ – adrianm
@adrianm Thú vị, tại sao điều này không ảnh hưởng đến hàm 'CONVERT' trong câu trả lời hàng đầu? – Brad
@adrianm nhưng cũng nếu tôi làm 'SET DATEFORMAT dmy; Chọn năm (CAST ('2012-01-03' AS datetime)) 'Tôi nhận được năm 2012 ở đâu như tôi mong đợi nó trả lại một lỗi hoặc 3? – Brad
Sử dụng chức năng Convert
Select Convert(datetime ,YEAR + '/' + MM + '/' + DAY)
Thay YEAR
với cột năm của bạn, MM
với tháng, và DAY
với cột ngày của bạn. và tiếp nhau để xây dựng chuỗi ngày của bạn
Điều này có vẻ là cho Oracle, nhưng câu hỏi được gắn thẻ với SQL Server – Lamak
Tôi đoán 'Từ kép' là những gì bạn đang nói về? có thể là Oracle nhưng hàm 'Chuyển đổi' là một hàm ** SQL-Server **. –
Có, 'CONVERT' là một hàm SQL Server, nhưng' YEAR' và 'DAY' là các từ dành riêng, vì vậy bạn không thể sử dụng chúng mà không kèm theo chúng trong' [] '. Và bạn cũng thiếu định dạng 'CONVERT' để xác định rằng bạn đang chuyển ngày trên' YYYY/MM/DD'. Cuối cùng, bạn giả định rằng tất cả các cột là ký tự, vì bạn không chuyển đổi chúng trước. (Oh, tôi quên mất, tôi thậm chí đã không downvoted câu trả lời của bạn ở nơi đầu tiên) – Lamak
SELECT CAST(STR(10000 * Year + 100 * Month + Day) AS DATETIME)
Cảm ơn bạn đã giải pháp, tôi đã có cột năm và tháng trong bảng và tôi muốn kiểm tra nó với ngày bắt đầu và ngày kết thúc..Vì vậy tôi đã tìm kiếm giải pháp bằng cách sử dụng mà tôi có thể xây dựng ngày trong SQL và kiểm tra với ngày bắt đầu và kết thúc ... CAST ((10000 * ci.year + 100 * ci.month + 01) AS DATETIME)> = startDate –
Một hơn, chỉ để lấp đầy danh sách các cách tiếp cận khác nhau:
select
dateadd(d, t.d-1, dateadd(m, t.m-1, dateadd(yy, t.y-1900, 0)))
from (values
(2011, 10, 26)
,(2012, 1, 5)
,(2013, 7, 15)
) t(y, m, d)
Trong SQL Server 2012, bạn có thể sẽ được tốt hơn tránh nối chuỗi hoặc toán học phức tạp , như họ đã tạo ra một chức năng dường như chỉ dành cho bạn:
SELECT DATEFROMPARTS(2013, 8, 19);
Tất nhiên, lưu trữ các dữ liệu sai ngay từ đầu có thể dẫn đến các vấn đề - ví dụ, những gì hạn chế ngăn chặn s y = 2013, m = 2 và d = 31 trong bảng? Bạn nghĩ bạn có thể bọc rằng với TRY_CONVERT()
, nhưng không quá nhiều:
SELECT TRY_CONVERT(DATE, DATEFROMPARTS(2013, 2, 31));
Lỗi:
Msg 289, Level 16, State 1, Line 3
Cannot construct data type date, some of the arguments have values which are not valid.
Vì vậy, để ngăn chặn dữ liệu xấu từ đi vào ba cột này, bạn sẽ cần sử dụng một trong các phương pháp rườm rà trên trong một hạn chế séc hoặc kích hoạt một ...
... hoặc ...
... trong bất kỳ phiên bản, bạn có thể sửa chữa bàn và lưu trữ một ngày (hoặc datetime) ở nơi đầu tiên. Bạn nhận được tất cả các lợi ích của việc xác thực tự động cũng như chức năng ngày/giờ bên trong mà bạn không nhận được với ba số nguyên không liên quan riêng biệt. Tốt hơn hết là rút các phần ra khi bạn cần chúng một cách riêng biệt (với các cột được tính toán, một khung nhìn hoặc thời gian truy vấn) từ một giá trị được đảm bảo là ngày, hơn là cố gắng dựa vào các phần riêng lẻ để tạo thành một ngày hợp lệ. ..
- 1. chia ngày thành các cột khác nhau trong năm, tháng và ngày
- 2. bằng Python, Làm thế nào tôi có thể chuyển đổi một chuỗi thành một đối tượng ngày tháng và nhận được năm, tháng và ngày riêng biệt?
- 3. Làm thế nào để có được tất cả các ngày (tháng, ngày và năm) giữa hai ngày trong python?
- 4. Làm thế nào để đánh giá sự khác biệt về ngày trong năm, tháng và ngày (ruby)?
- 5. Django: Nhóm theo ngày (ngày, tháng, năm)
- 6. Ngày và Thời gian trong các cột riêng biệt, chuyển đổi thành ngày giờ trong R
- 7. Tạo ngày giờ trong Rails bằng tháng, ngày và năm
- 8. Android Làm thế nào để thay đổi Tổng số ngày thành năm, tháng và ngày chính xác?
- 9. Làm thế nào để chuyển đổi số ngày nhất định thành năm, tháng và ngày trong MySQL?
- 10. Chuyển đổi một số (ngày) thành ngày, tháng và năm với jQuery
- 11. Chuyển đổi phút thành ngày, tuần, tháng và năm
- 12. Làm thế nào để trích xuất năm, tháng, ngày, giờ và phút từ một DateTimeField?
- 13. bộ chọn ngày tháng jquery nhưng ngày tháng và năm trong danh sách thả xuống riêng lẻ
- 14. Đặt hàng theo ngày giảm dần - tháng, ngày và năm
- 15. Lấy Năm/Tháng/Ngày từ một ngày giờ trong php?
- 16. ngày tháng trước năm 1970
- 17. Định dạng ngày trong ngày, ngày tháng, năm
- 18. Câu hỏi đơn giản: Cách chia ngày (08-17-2011) thành tháng, ngày, năm? PHP
- 19. Làm cách nào để nhận được số ngày trong tháng cho tháng và năm cụ thể?
- 20. Cách chọn ngày/tháng và năm từ jquery datepicker
- 21. Trừ ngày/tháng/năm từ đối tượng Ngày
- 22. Nhận chi tiết ngày (ngày, tháng, năm) trong GWT
- 23. Thay đổi năm, tháng và ngày của đối tượng NSDate
- 24. Phân chia các Mảng Ngày dựa trên Tháng hoặc Năm
- 25. Khi nào sử dụng ngày và giờ riêng biệt thay vì một ngày giờ riêng lẻ
- 26. LINQ: Nhóm theo tháng và năm trong trường ngày giờ
- 27. Làm thế nào để cộng/trừ ngày tháng với JavaScript?
- 28. Cách viết tập lệnh hệ vỏ để thêm ngày tháng và năm vào ngày hiện tại
- 29. Định dạng ngày giờ cho tháng và năm
- 30. nhóm theo năm, tháng, ngày trong một SQLAlchemy
Các cột có phải là ký tự để bắt đầu không? – Brad
Cũng sẽ tuyệt vời nếu bạn gắn thẻ câu hỏi của mình với phiên bản SQL Server chính xác mà bạn cần hỗ trợ. Có những câu trả lời khác nhau và tốt hơn tùy thuộc vào phiên bản của SQL Server bạn đang sử dụng. –