簡體   English   中英

在SQL Server中將datetime轉換為字符串/ varchar

[英]Convert datetime to string/varchar in SQL Server

我在SQL Server中有一個視圖,該視圖使用日期來確定從哪些表訪問數據。 問題在於,僅當給定日期為'20120423'這樣的varchar時,它才似乎有效。

因此,我嘗試使用GETDATE()動態創建此日期,而不是必須使用鍵入的版本。 當我運行頂部的SELECT語句時,它會像我期望'20120423'那樣返回'20120423'但是當我嘗試比較兩個值時,它們不相等,並且IF語句顯示'VALUES ARE NOT THE SAME'

SELECT 
    '''' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +'''' 

IF '''' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +''''  = '20120423' 
BEGIN
    PRINT 'VALUES ARE THE SAME'
END
ELSE
BEGIN
   PRINT 'VALUES ARE NOT THE SAME'
END

我對從這里去哪里有些迷茫。 謝謝你的幫助。

編輯
給出答案后,即使我認為對這兩個查詢的處理方式有所不同,這兩個查詢也應該相同。

SELECT * 
FROM DatesView 
WHERE Timestamp > CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112)

SELECT * 
FROM DatesView 
WHERE Timestamp > '20120423'

頂部的瀏覽所有表,而底部的僅正確搜索必要的表。

您會被引號拋棄,只需刪除它們就可以了。

SELECT CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) 

IF CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112)  = '20120423' 
BEGIN
    PRINT 'VALUES ARE THE SAME'
END
ELSE
BEGIN
   PRINT 'VALUES ARE NOT THE SAME'
END

刪除前兩個' 嘗試這個。 您正在比較'20120423'=20120423

SELECT '' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +'' 

IF '' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +''  = '20120423' 
BEGIN
    PRINT 'VALUES ARE THE SAME'
END
ELSE
BEGIN
   PRINT 'VALUES ARE NOT THE SAME'
END

您將在字符串中添加撇號,因此您的比較從字面上看 (用括號替換字符串定界符):

if ['20120423']  = [20120423]   

我想你要:

IF CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) = '20120423'

和/或

SELECT CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM