![](/img/trans.png)
[英]Get wordpress post publish date in format 2015-02-05T09:20:00+08:00
[英]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.