[英]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.