Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

chuyển đổi varchar (ddmmyyyy) sang định dạng ngày tháng

ddmmyyyy không phải là một định dạng ngày hợp lệ. Trước tiên, bạn cần biến chuỗi đó thành một chuỗi nào đó có thể được phân tích cú pháp thành DATE / DATETIME . Cách nhanh nhất có thể chỉ là SUBSTRING các mảnh thành một mm/dd/yyyy định dạng. Điều đó không chuyển đổi thành công. Nhưng bạn có VARCHAR(8) . Vì vậy, bạn cần phải tăng giá trị đó thành VARCHAR(10) (hoặc tốt hơn, chỉ cần CHAR(10) ) hoặc khai báo một biến cục bộ để giữ giá trị đã thay đổi.

Ví dụ:

DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';

DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
             + '/' + SUBSTRING(@Date, 1, 2)
             + '/' + SUBSTRING(@Date, 5, 4);

SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014     2014-03-25

CHỈNH SỬA: Thực ra, tôi đã tìm ra một cách đơn giản hơn một chút. Tôi đã bắt đầu với phương pháp này nhưng nhận ra rằng nó không hoạt động với ddmmyyyy trái ngược với mmddyyyy . Bằng cách nào đó, tôi đã bỏ lỡ rằng có một số kiểu ngày thích hợp cho dd/mm/yyyy . Vì vậy, chỉ cần thêm hai dấu gạch chéo vào chuỗi đến và sau đó gọi CONVERT hoạt động, nhưng chỉ khi bạn sử dụng 103 như là "phong cách". Và giống như giải pháp đầu tiên, nó yêu cầu thay đổi tham số đến thành VARCHAR(10) hoặc CHAR(10) thay vì VARCHAR(8) hoặc tạo một biến cục bộ thành CHAR(10) .

DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';

DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');

SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014     2014-03-25

Bạn có thể tìm thấy "kiểu" chuyển đổi trên trang MSDN cho CAST và CONVERT .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm khóa chính từ một bảng trong danh sách được phân tách bằng dấu phẩy

  2. Nối các chuỗi bằng đường dẫn xml

  3. Tại sao câu lệnh CREATE PROCEDURE không thành công khi tôi sử dụng nó với IF Statement ở đây?

  4. Chuỗi kết nối cho localdb cho phiên bản 11 là gì

  5. DATETIMEFROMPARTS () Ví dụ trong SQL Server (T-SQL)