Sql-Server

將日期轉換為 yyyymmdd 格式

  • April 30, 2017

推薦使用哪個 SQL 命令將日期轉換為yyyymmdd格式?

  1. convert(varchar(8), getdate(), 112);要麼
  2. convert(varchar, getdate(), 112)

我注意到如果我使用第二個,它將在日期後附加兩個空格。(例如 [ 20130705] - 注意 value 後面的兩個空格20130705

是否推薦使用第一條 SQL 語句?

預設情況下,如MSDN 中所述,如果沒有為 varchar 指定長度,則在使用 CAST 或 CONVERT 時預設為 30,在聲明為變數時預設為 1。

為了展示,試試這個:

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

SELECT @WithLength,@WithoutLength

這是非常危險的,因為 SQL Server 會悄悄地截斷值,甚至沒有警告,並且可能導致意外錯誤。

但是,談到有問題的主題,在給定的場景中,無論有沒有長度,這兩個語句之間沒有任何區別,我看不到你正在談論的 2 個尾隨空格。嘗試這個:

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))

您會注意到該DATALENGTH()函式在這兩種情況下都返回 8。

拉吉

引用自:https://dba.stackexchange.com/questions/42395