0

以下は私のSQLクエリです。nullを返す理由を教えてください

Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')
4

4 に答える 4

2

MySQL STR_TO_DATE関数から:

サーバーはstrをスキャンして、フォーマットをそれに一致させようとします。...スキャンはstrの先頭から開始され、フォーマットが一致しないことが判明した場合は失敗します。

これが最初のクエリが失敗する理由です。11-APR-74は​​%e%b%Yのように見えないため、日付を解析できません。代わりに行う必要があります

SELECT STR_TO_DATE ('11-APR-74','%e-%b-%Y')

MySQLの日付と時刻のタイプから:

MySQLはいくつかの形式で値を解釈しようとしますが、日付部分は、月-日-年または日-月ではなく、常に年-月-日の順序で指定する必要があります(たとえば、「98-09-04」)。他の場所で一般的に使用される年次注文(たとえば、「09-04-98」、「04-09-98」)。

これが、2番目のクエリが失敗する理由です。74は有効な日ではないため、代わりに実行する必要があります。

SELECT DATE_FORMAT ('74-APR-11','%e%b%Y')

DATE_FORMATは通常、デフォルトの出力とは異なる出力を取得するために、文字列リテラルではなくDB値で使用されることに注意してください。

于 2012-12-13T08:31:33.800 に答える
1

文字列から日付に変換したい場合

Select STR_TO_DATE ('11-APR-74','%d-%b-%y')
于 2012-12-13T08:14:41.437 に答える
0

format が文字列値'%e%b%Y'に対応していないため(関数が期待するように)、value は typeであるが(関数が期待するように) 一致しないためです。'11-APR-74'STR_TO_DATE'11-APR-74'CHARDATETIMEDATE_FORMAT

値で表される日付を再フォーマットする場合CHARは、元のフォーマットからDATETIME最初のフォーマットに変換してから、目的のフォーマットの文字列に変換します。

SELECT DATE_FORMAT(STR_TO_DATE('11-APR-74','%e-%b-%Y'),'%e%b%Y');

ところで、プレーンな文字列サンクションでダッシュを取り除くことができます:

SELECT REPLACE('11-APR-74','-','');
于 2012-12-13T08:40:59.647 に答える
0

::のように使用します

Select STR_TO_DATE ('11-APR-74','%e-%b-%Y')
于 2012-12-13T08:17:20.350 に答える