2008-08-12 59 views
2

我有一個存儲過程,而作爲它的參數VARCHAR需要被投作爲一個日期時間供以後使用:Sybase(T-SQL)中用於varchar日期驗證的最佳方法?

SET @the_date = CAST(@date_string AS DATETIME) 

我期待的日期字符串格式來提供「DD-MON-YYYY」,但爲了防守編碼,如果由於某種原因無法成功轉換,我想默認爲系統日期並繼續。在PL/SQL中,我可以使用異常處理來實現這一點,我也可以用正則表達式很容易地做到這一點,但Sybase支持的有限模式匹配不允許我這樣做,我不能依賴第三方庫或擴展。 T-SQL中有這樣一個簡單的方法嗎?

注:使用Sybase ASE 12.5.3,沒有ISDATE功能

回答

1

我有類似的問題。您可能可以這樣做:

SET arithabort arith_overflow off 
SET @the_date = CAST(@date_string AS DATETIME) 
IF @the_date is NULL 
    set @the_date = getdate() 
SET arithabort arith_overflow on 

但是,這在選擇中不起作用。它可以在遊標(boo)或SQL批處理之前/之後的邏輯中正常工作。

0

爲 「驗證日期字符串SQL」 搜索時,在谷歌找到this in the second result

----Invalid date 
SELECT ISDATE('30/2/2007') 
RETURNS : 0 (Zero) 
----Valid date 
SELECT ISDATE('12/12/20007') 
RETURNS : 1 (ONE) 
----Invalid DataType 
SELECT ISDATE('SQL') 
RETURNS : 0 (Zero) 
+0

IsDate在Sybase中不是一個有效的函數 – ninesided 2009-06-04 01:42:49

+0

你打算如何爲我在事後添加的內容投票。我回答了這個問題後。您唯一的標識符是T-SQL,它在Microsoft SQL Server中最常用,它支持ISDATE。壞禮節。 – 2009-06-04 12:05:59

+0

我認爲投票下來的目的是爲了表明一個沒有幫助的答案,幫助確實有助於回到頂端的答案,這並不意味着一個輕微的 – ninesided 2009-06-05 12:55:19

0

確保SQL Server在執行

SET DATEFORMAT mdy; 
1

我天知道日子,在您的字符串幾個月和幾年的順序,如果問題是有關的Microsoft SQL Server,然後我們就一直在商業!

不幸的是,Sybase現在是一個完整的「數據庫」,因爲從1997年開始,實際上需要花費一年的時間。

如果輸入格式只需要'DD-MON-YYYY'且沒有例外,那麼我認爲通過使用SUBSTR()切片輸入來實現相當數量的驗證,首先做一些簡單的事情之後,如檢查長度。

但是,我認爲最近版本的Sybase(例如SQL Anywhere 11)具有正則表達式支持,儘管這已經有一段時間了,因爲我不得不忍受T-SQL。一些谷歌搜索讓我更加懷疑。

1

看來你會被卡在自己的身上。

您或許可以使用this作爲起點。

0

你試過convert而不是cast

select convert(datetime , @date_string) 
1

你能不能做這樣的事情:

SELECT @the_date = CASE @date_string 
         WHEN '[0-9][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9]' 
         THEN CONVERT(datetime, @date_string) 
         ELSE GETDATE() 
        END 

相關問題