2011-06-24 44 views
11

Tôi cố gắng để thực hiện chức năng sau tích hợp sẵn trong sql nhưng nó mang lại cho tôi lỗi rằng chức năng này không tồn tạiChức năng Định dạng() không hoạt động?

truy vấn của tôi:

select EmpId, EmpName, format(EmpJoinDate, "YYYY-DD-MM") as date from Employee 

Lỗi tôi đang nhận được:

'format' is not a recognized built-in function name 

Điều gì có thể là vấn đề hoặc tôi đang làm gì sai?

Cảm ơn!

Trả lời

7

Sử dụng hàm Convert thay thế. Ví dụ:

select convert(varchar(5), GETDATE(), 126) + convert(varchar(5), GETDATE(), 105) 
+1

tại sao định dạng() không hoạt động? –

+0

Vì nó không tồn tại trong SQL Server, bạn có nghĩ đến Access không? –

+0

Bởi vì khi thông báo lỗi cho biết, nó không phải là một chức năng hợp lệ. – Ray

5

Đó là bởi vì FORMAT() không phải là một chức năng tích hợp sẵn trong SQL 2005. Bạn cần phải sử dụng các chức năng CONVERT():

SELECT 
    EmpId, 
    EmpName, 
    REPLACE(CONVERT(VARCHAR(10), EmpJoinDate, 102), '.', '-') AS date 
FROM 
    Employee 

Một vài hãy cẩn thận mặc dù ... "ngày" là một từ dành riêng tôi tin, vì vậy tôi sẽ không đề nghị sử dụng nó, ngay cả như một bí danh cột. Ngoài ra, trên thực tế cho YYYY-MM-DD. YYYY-DD-MM là khá hiếm tôi tin. Nếu bạn thực sự muốn điều đó, bạn sẽ cần phải ghép nối mọi thứ lại với nhau bằng các hàm DATEPARTCAST hoặc nối các thứ bằng cách sử dụng SUBSTRING với CONVERT.

Thực hiện tìm kiếm trên CONVERT và bạn sẽ có thể tìm thấy tất cả các định dạng khác nhau được hỗ trợ. Cái mà tôi đã sử dụng ở trên (102) là dành cho YYYY.MM.DD, vì vậy tôi đã thay thế để thay thế dấu gạch ngang.

+0

Tại sao phải thay thế khi có 'chuyển đổi (varchar (10), EmpJoinDate, 23)' để định dạng thẳng thành "YYYY-DD-MM"? Tôi đã mong đợi đó là câu trả lời phổ biến nhất ... –

2

Theo tài liệu MSDN, http://msdn.microsoft.com/en-us/library/hh213505(SQL.110).aspx, đó là chức năng tích hợp sẵn. Tôi cho rằng nó chưa được thực hiện.

+6

Trang đó dành riêng cho SQL Server "Denali" (bây giờ chính thức là SQL Server 2012) như được chỉ ra ngay bên dưới tiêu đề: nếu nó được hỗ trợ trong các phiên bản khác, văn bản này sẽ là một danh sách thả xuống. – onedaywhen

0

Các câu trả lời khác sẽ hoạt động nhưng sử dụng một số chuỗi hacky thay thế và concats. Mặc dù bạn có thể thiết lập date_style đến 23 để chuyển đổi sang định dạng thẳng "YYYY-DD-MM":

convert(varchar(10), EmpJoinDate, 23) 

Đối với một danh sách đầy đủ các định dạng Tôi muốn tham khảo tuyệt vời SO-câu trả lời này: https://stackoverflow.com/a/19537658/2140636

Các vấn đề liên quan