以下は私のSQLクエリです。nullを返す理由を教えてください
Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')
以下は私のSQLクエリです。nullを返す理由を教えてください
Select STR_TO_DATE ('11-APR-74','%e%b%Y')
OR
Select DATE_FORMAT ('11-APR-74','%e%b%Y')
サーバーはstrをスキャンして、フォーマットをそれに一致させようとします。...スキャンはstrの先頭から開始され、フォーマットが一致しないことが判明した場合は失敗します。
これが最初のクエリが失敗する理由です。11-APR-74は%e%b%Yのように見えないため、日付を解析できません。代わりに行う必要があります
SELECT STR_TO_DATE ('11-APR-74','%e-%b-%Y')
MySQLはいくつかの形式で値を解釈しようとしますが、日付部分は、月-日-年または日-月ではなく、常に年-月-日の順序で指定する必要があります(たとえば、「98-09-04」)。他の場所で一般的に使用される年次注文(たとえば、「09-04-98」、「04-09-98」)。
これが、2番目のクエリが失敗する理由です。74は有効な日ではないため、代わりに実行する必要があります。
SELECT DATE_FORMAT ('74-APR-11','%e%b%Y')
DATE_FORMATは通常、デフォルトの出力とは異なる出力を取得するために、文字列リテラルではなくDB値で使用されることに注意してください。
文字列から日付に変換したい場合
Select STR_TO_DATE ('11-APR-74','%d-%b-%y')
format が文字列値'%e%b%Y'
に対応していないため(関数が期待するように)、value は typeであるが(関数が期待するように) 一致しないためです。'11-APR-74'
STR_TO_DATE
'11-APR-74'
CHAR
DATETIME
DATE_FORMAT
値で表される日付を再フォーマットする場合CHAR
は、元のフォーマットからDATETIME
最初のフォーマットに変換してから、目的のフォーマットの文字列に変換します。
SELECT DATE_FORMAT(STR_TO_DATE('11-APR-74','%e-%b-%Y'),'%e%b%Y');
ところで、プレーンな文字列サンクションでダッシュを取り除くことができます:
SELECT REPLACE('11-APR-74','-','');
::のように使用します
Select STR_TO_DATE ('11-APR-74','%e-%b-%Y')