簡體   English   中英

識別日期格式09-08-2014

[英]identify date format 09-08-2014

我在mysql數據庫中有超過5000條記錄,其中日期以varchar格式存儲。

日期和格式示例

09-08-2014 dd-mm-yy 
4-2-2014 mm-dd-yy
2014-4-4 yy-mm-dd

如何識別每種日期格式並將其更改為通用格式?

我面臨的問題是,當我運行查詢以獲取dd-mm-yy時,mm-dd-yy的值也相同。

沒有規則表示沒有算法。

您所要求的聽起來像一次工作,以獲取合理的數據的方式。

當您到達存儲為varchars的日期時,許多事情可能會出錯。 您提到的那些和其他最糟糕的情況,例如根本沒有約會,例如60/90/2014

但是,列的一般規則是其內容是統一的,因此如果您具有xx-yy-AAAA形式的字符串(其中xx大於12或yy大於12),則可以使用一些查詢進行調查,並假設所有列共享相同的格式。

有一種方法, 但是對於dd和mm值小於或等於12的mm-dd-yy和dd-mm-yy日期格式是模棱兩可的

創建表並插入樣本值:

create table dates(
    stored_date varchar(20)
);


insert into dates (stored_date)
values 
('09-08-2014'),
('4-2-2014'),
('2014-4-4');

查詢以提取每一行的日期值:

select stored_date,  
case 
  when date(stored_date) = stored_date then
    date(stored_date)
  when str_to_date(stored_date,'%d-%m-%Y') is not null then
    str_to_date(stored_date,'%d-%m-%Y')
  when str_to_date(stored_date,'%m-%d-%Y') is not null then
    str_to_date(stored_date,'%m-%d-%Y')
 else 
    null
 end as parsed_date
from dates;

結果:

+-------------+-------------+
| stored_date | parsed_date |
+-------------+-------------+
| 09-08-2014  | 2014-08-09  |
| 4-2-2014    | 2014-02-04  |
| 2014-4-4    | 2014-04-04  |
+-------------+-------------+

您將需要手動過濾日期格式,但可能會有些行(而不是5000條記錄)

謝謝你們的幫助

由於它是varchar格式,所以我通過REGEX解決了這個問題。必須為所有可用格式生成正則表達式

使用此正則表達式過濾dd / mm / yy -REGEXP'[0-9] {2} / [0-9] {2} / [0-9] {4}';

參考http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql-select-statements/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM