2

私は少し逆に物事をやっています:

そこで、列を日時からvarcharに変換しました(正当な理由があります)。私の問題は、TIMEのすべての0も変化していることです。concat()を使用して文字列を削除しようとしています。

例:2013-12-12 00:00:00

出力:2013-12-12

問題は、すべてのvarcharが「00:00:00」で終わるわけではないということです。それらのいくつかは、システムが日時ではなくvarcharに移行した後に配置されたため、文字列から-Xを削除するだけで、最初に文字列が12文字よりも大きいかどうかを確認できません。

私は次のようなことを考えていました

UPDATE logic_intern_report_link SET comp_date=SUBSTR(comp_date,0,10)

ただし、これにより、その列のすべての値が削除されます。

4

3 に答える 3

8

私は JW. の解決策に同意しますが、あなたの質問に答えるために: 元のクエリで空の値を取得している理由は、SUBSTR() 関数が 1 ベースの開始インデックスを必要とするためです。 2 番目のパラメーター。これを試して

SELECT SUBSTR(comp_date,1,10) FROM logic_intern_report_link

違いを見るために。

(完全な開示のために: SUBSTR() 関数は負の開始インデックスも受け入れます)

于 2013-03-18T15:34:12.313 に答える
5
UPDATE  logic_intern_report_link 
SET     comp_date = DATE_FORMAT(DATE(comp_date), '%Y-%m-%d')
于 2013-03-18T15:27:18.180 に答える
0
update logic_intern_report_link 
set comp_date = REPLACE(comp_date, ' 00:00:00', '')
于 2013-03-18T15:29:04.577 に答える