很簡單的問題,我不能完全找到了答案:有沒有一種安全的方法來建立SQL日期時間?
有一個簡單而安全的方式†投下varchar
到datetime
在SQL Server?
†即妥善處理帶有默認datetime值
很簡單的問題,我不能完全找到了答案:有沒有一種安全的方法來建立SQL日期時間?
有一個簡單而安全的方式†投下varchar
到datetime
在SQL Server?
†即妥善處理帶有默認datetime值
您可以使用isdate功能篩選行非日期時間字符串。此查詢返回三行,無需任何轉換錯誤:
with v as (
select '20110714' value union all
select '2011-07-15' union all
select '3/22/2011' union all
select 'foo'
)
select cast(value as datetime)
from v
where isdate(value) = 1
編輯
當你需要有一個默認vaue(如當前的日期/時間),你可以做這樣的事情:
select case when isdate(value) = 1 then cast(value as datetime) else getdate() end
你可以嘗試
select cast ('28/08/2006 11:23:25' as datetime)
SELECT * FROM tab_val WHERE (CASE ISDATE(val) WHEN 1 THEN CAST(val As DateTime) ELSE NULL END)
中的更多詳細信息我們可以檢查該列是否具有有效日期時間,如果不是,則返回空值而不生成任何錯誤。
SELECT CASE ISDATE([YourDate]) WHEN 0
THEN CAST([YourDate] AS DATETIME)
ELSE CAST(NULL AS DATETIME) END AS [Your Date]
FROM [dbo].[yourtable]
從SQL Server Denali中,您可以使用TRY_CONVERT
。案例表達式是以前版本中唯一的safe way。
對不起,你的回答和我的回答是一樣的,但我沒有從你的代碼複製。 – rahularyansharma
完美。對於其他人,如果你希望它在線(例如CASE WHEN(isdate(col)= 1),那麼你也可以「case when」它然後轉換(datetime,col)ELSE 0 END)「0」會給你1900-01- 01,因此您可以用另一個值(例如'2000-01-01')替換爲默認值,並且它會自動轉換爲日期時間。 –
這個答案的第一部分是不安全的。 [沒有保證](http://connect.microsoft.com/SQLServer/feedback/details/537419/sql-server-should-not-raise-illogical-errors)在項目之前處理了WHERE '。 –