Chuyển đổi một ngày thành định dạng yyyymmdd


7

Lệnh SQL nào được khuyến nghị để chuyển đổi ngày thành yyyymmddđịnh dạng?

  1. convert(varchar(8), getdate(), 112); hoặc là
  2. convert(varchar, getdate(), 112)

Tôi nhận thấy rằng nếu tôi sử dụng cái thứ hai, nó sẽ nối thêm hai khoảng trắng sau ngày. (ví dụ [ 20130705] - chú ý hai khoảng trắng sau giá trị 20130705)

Có nên sử dụng câu lệnh SQL đầu tiên không?


không có tài liệu tham khảo trực tiếp cho câu hỏi của bạn msdn.microsoft.com/en-us/l
Library / ms176089.aspx

2
Tôi khuyên bạn nên luôn luôn xác định rõ ràng độ dài cho a varchar. Ở những nơi khác nhau, bạn có được độ dài mặc định khác nhau; làm tham số cho một thủ tục, bạn nhận được độ dài mặc định là 1 ký tự - thường không phải là những gì bạn mong đợi.
marc_s

Câu trả lời:


16

Theo mặc định, như được ghi trong MSDN , nếu không có độ dài nào được chỉ định cho varchar, nó sẽ mặc định là 30 khi sử dụng CAST hoặc CONVERT và sẽ mặc định là 1 khi được khai báo là biến.

Để chứng minh, hãy thử điều này:

DECLARE @WithLength varchar(3),@WithoutLength varchar;
SET @WithLength = '123';
SET @WithoutLength = '123';

SELECT @WithLength,@WithoutLength

Điều này rất nguy hiểm, vì SQL Server lặng lẽ cắt ngắn giá trị, thậm chí không có cảnh báo và có thể dẫn đến các lỗi không mong muốn.

Tuy nhiên, đến với chủ đề được đề cập, trong kịch bản đã cho, có hoặc không có độ dài không tạo ra bất kỳ sự khác biệt nào giữa hai câu lệnh và tôi không thể thấy 2 dấu cách mà bạn đang nói đến. Thử cái này:

SELECT CONVERT(varchar(8), GETDATE(), 112) 
UNION ALL 
SELECT DATALENGTH(CONVERT(varchar(8), GETDATE(), 112)) 
UNION ALL 
SELECT CONVERT(varchar, GETDATE(), 112)
UNION ALL
SELECT DATALENGTH(CONVERT(varchar, GETDATE(), 112))

Bạn sẽ nhận thấy rằng DATALENGTH()hàm trả về 8 trong cả hai trường hợp.

Raj

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.