不同的日期格式,我需要VARCHAR
值轉換成一個視圖的多個列DATETIME
進行排序和格式IsDate函數目的在另一個應用程序SQL Server上(在本地格式顯示)2008年在TSQL
有目前有兩個問題。
- 的
VARCHAR
值的輸入格式不同(但在 列級別一致) - 也有可能發生故障的值(例如:20..05.2015)
不幸的是,TRY_CONVERT功能是僅適用於SQL Server 2012及更高版本。
ISDATE
不起作用,因爲該視圖包含不同的日期格式,我既不能在用戶定義的函數中也不在視圖中設置語言,這會導致ISDATE
與德語日期格式一起工作。
有沒有更容易解決我的問題的解決方案? 我首先想到的是寫像
FUNCTION TryConvertStringAsDatetime ( @value VARCHAR(MAX),
@format INT
)
使用了
CONVERT
函數的格式數量
功能,但檢查每一個可能的格式手動讓我害怕了一下。
例子:TryConvertStringAsDatetime('20 .05.2015' ,104)(有一些僞代碼)
SET @day = character 1 and 2
SET @month = character 4 and 5
SET @year = character 7, 8, 9 and 10
SET @dateODBCFormat = @year - @month - @day (concatenated with hyphen and not subtracted :)
IF ISDATE(@dateODBCFormat) = 1
RETURN CONVERT(DATETIME, @dateODBCFormat, 120)
ELSE
RETURN CONVERT(DATETIME, 0) (does the job)
你可以期望遇到哪些的DateFormats? –
沒有簡單的內置解決方案。您必須分析數據以瞭解您需要支持哪些轉換規則,並編寫自定義代碼才能將其轉換。在前端應用程序或CLR過程中可能會更好。 –
目前有格式104(德語)和120(ODBC)的值。 – GoToXY