[英]Update date with specific format if value of column is not in same format in Oracle sql
我有一張下面的桌子。 這里的值是字符串,盡管它具有日期值
id date_value
1 28-JUL-17
2 20/10/17
3 21-09-2017
4 04-AUG-2017
5 (null)
6 xxxx
現在,僅當日期不是dd-MON-yy格式時,才需要更新date_value列的值。 此外,該列中的值可以為null或除date以外的任何其他值,應將其忽略
請幫忙。
對不起,我錯過了一部分。 格式為dd-MM-yy的值應更新為dd-MON-yy。
所以直到現在我嘗試
update table_a set value = to_char(to_date(date_value, 'dd-MM-yy'), 'dd-MON-yy')
where date_value is not null
and date_value not like '%/%/%'
and date_value != 'xxxx'
我收到了SQL錯誤:ORA-01858-“在需要數字的位置找到了非數字字符”
我可以使用以下查詢解決此問題
update table_a set value = to_char(to_date(date_value, 'dd/MM/yyyy'), 'dd-MON-yy')
where regexp_like (date_value, '[0-9]{2}/[0-9]{2}/[0-9]{4}')
使用正則表達式:
update t
set date = . . .
where not regexp_like(date, '[0-9]{2}-[A-Z]{3}-[0-9]{2}');
這將檢查整體格式。 如果需要特定的月份:
update t
set date = . . .
where not regexp_like(date, '[0-9]{2}-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-[0-9]{2}');
的. . .
. . .
用於您要使用的新值。
您可以使用CASE語句。
與此類似:
UPDATE table_name
SET date_value= CASE
WHEN (date_value LIKE '%-%') THEN TO_DATE(date_value)
WHEN (date_value LIKE '%/%') THEN TO_DATE(REPLACE(date_value,'/','-'))
ELSE NULL
END
看到這個帖子: https : //stackoverflow.com/a/5171127/7613110
和文檔: https : //docs.oracle.com/cd/B19306_01/appdev.102/b14261/case_statement.htm
我認為您需要在表中創建第二列,該列為日期格式,並允許為null。 然后使用Oracle的to_date函數將您的列轉換為日期格式的新列。
問題是您必須指定當前日期格式才能使用to_date,因此您將需要一些其他SQL來確定當前格式是什么,即,如果前兩個位置> 12,則應為dd / mm / yy格式,因此您將使用to_date(date_value,'dd / mm / yy')。
您可能需要手動轉換剩余的剩余物,例如2007年12月4日。 您的表中不應包含其他文本,因此請消除任何非日期或null的內容。
編輯:這將以YYYY-MM-DD HH:MM:SS的標准Oracle格式存儲日期,在使用to_char(new_date_field,'dd / mm / yyyy')<-或任何格式顯示時,您需要重新格式化日期想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.