2016-07-08 10 views
-4

私は現在、クレジットカードの日付がMM/YYの形式であるクエリに取り組んでいます。私は、有効期限が過ぎたか、次の30日(来月)に渡るかを把握したいと思っています。私はSQLに慣れていないので、どんな助けでも大変感謝しています。クレジットカードMMYYフォーマットの将来や過去の日付

+0

使用するdbmsにタグを付けます。 (日付/時刻の機能は、あまりにも頻繁に遠くに準拠したANSI SQLからである。) – jarlh

+0

はあなたの試みとどのようなエラーあなたが得を表示します。 –

+0

それ以上の情報が必要です。どのDBMSを使用していますか? (SQL Server?Oracle?MySQL?その他)あなたの日付はどのようなデータ型ですか?サンプルデータと希望の結果がありますか?これまでに何を試しましたか? – Siyual

答えて

0

カードが有効でない場合は、カードは月に期限切れとなる場合は、カードはすでに期限切れと2されている場合、このコードは1、@check変数0に生成されます。

SET @exp_date = '05/13'; 

SELECT STR_TO_DATE(CONCAT('01/',@exp_date),'%d/%m/%Y') INTO @new_date; 

SET @new_date = DATE_ADD(@new_date, INTERVAL 1 MONTH); 
SET @new_date = DATE_SUB(@new_date, INTERVAL 1 DAY); 

SET @future = DATE_ADD(NOW(), INTERVAL 1 MONTH); 

IF @new_date > @future THEN SET @check = 0; 
ELSEIF @new_date < NOW() THEN SET @check = 1; 
ELSEIF @new_date > @future THEN SET @check = 2; 
END IF; 

これはMySQLでも有効です。

+0

深くお返事ありがとうございます、私は現在SQL Serverを使用しています。これはどちらの場合でも有効でしょうか? – Matt

+0

SQL Fiddleを使ってチェックしようとしていますが、ダミーのテーブルを作成することを拒否します。 – weirdgyn

+0

私はあなたがMicrosoft SQL Serverを意味することを願っています....あなたはMS SQLの方言でSTR_TO_DATE()とDATE_ADD()のようなものを見つけなければなりません... – weirdgyn

0

あなたの変数の初期サイズがある場合:MM/YY あなたは来月の初めを考慮すると、あなたの日付(12/16サンプル)を比較するには、このようsometihngを使用することができます。

DECLARE @ZZCCEXPDATE NVARCHAR(5) = '12/16' 
DECLARE @dtDate datetime = CONVERT(datetime,'01/' + @ZZCCEXPDATE, 3) 
SELECT DATEADD(mm, DATEDIFF(m,0,CONVERT(datetime,'01/' + @ZZCCEXPDATE, 3))+1,0) 

ので、 where句では次のものを使用できます。

..DATEADD(mm, DATEDIFF(m,0,CONVERT(datetime,'01/' + @ZZCCEXPDATE, 3))+1,0) 
+0

SQL Serverの日付/時刻は小数点以下6桁以上、だから、これはいくつかの方法で失敗する運命にある。 –

+0

ありがとう、今私は翌月の始まりを考慮する –

関連する問題