2

後で使用するために日時としてキャストする必要があるvarcharをパラメーターとして受け取るストアドプロシージャがあります。

SET @the_date = CAST(@date_string AS DATETIME)

日付文字列は「DD-MON-YYYY」の形式で提供されることを期待していますが、防御的にコーディングするために、何らかの理由で正常にキャストできない場合は、デフォルトでシステムの日付と継続する。PL / SQLでは、例外処理を使用してこれを実現でき、正規表現でもかなり簡単に実行できましたが、Sybaseでサポートされている制限付きのパターンマッチングではこれを実行できず、信頼できません。サードパーティのライブラリまたは拡張機能。T-SQLでこれを行う簡単な方法はありますか?

注意:Sybase ASE 12.5.3を使用する場合、ISDATE関数はありません。

4

7 に答える 7

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

ただし、これは選択ではうまく機能しません。カーソル (ブー) または SQL バッチの前後のロジックでうまく機能します。

于 2009-06-02T21:10:00.147 に答える
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

?

于 2009-06-12T17:16:27.233 に答える
1

質問が Microsoft SQL Server に関するものであった場合、私たちは商売をしていたはずです!

悲しいことに、Sybase は最近ではまったく別のデータベースです。

入力形式が単に 'DD-MON-YYYY' でなければならず、例外がない場合、最初に長さのチェックなどのいくつかの簡単なことを行った後、SUBSTR() を使用して入力をスライスすることにより、かなりの量の検証が達成されたと思います.

Sybase の最近のリリース (SQL Anywhere 11 など) では正規表現がサポートされていると思っていましたが、T-SQL に悩まされるのは久しぶりでした。いくつかのグーグルは、私にかなりの疑いを残します。

于 2008-08-12T16:40:18.533 に答える
1

あなたは自分自身を転がすのに行き詰まるようです。

おそらくこれを出発点として使用できます。

于 2008-08-12T17:50:45.193 に答える
0

「validatedatestringsql」を検索したときに、Googleの2番目の結果でこれが見つかりました。

----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)
于 2008-08-12T16:25:50.903 に答える
0

を実行して、SQL Serverが文字列内の日、月、年の順序を認識していることを確認します

SET DATEFORMAT mdy;
于 2008-08-12T16:29:56.947 に答える
0

convert代わりに試しましたcastか?

select convert( datetime , @date_string ) 
于 2009-06-02T21:25:59.677 に答える