尝试将日期列从YYYYMMDD更改为MMDDYYYY,同时保持varchar值。目前我的列设置为varchar(10)。有没有办法改变质量数字的字符串,因为我有数千行需要转换格式。
例如:
| ID | Date |
------------------------
| 1 | 20140911 |
| 2 | 20140101 |
| 3 | 20140829 |
我希望我的桌子看起来像:
| ID | Date |
------------------------
| 1 | 09112014 |
| 2 | 01012014 |
| 3 | 08292014 |
额外问题:如果有针对09/12/12的91212或者应该是1381这样的数据(例如应该是08/01/2013),那么在尝试转换此列时是否会导致问题?
答案 0 :(得分:0)
而不是将格式化的日期存储在单独的列中;只需在使用STR_TO_DATE
函数获取时更正格式(如您所说,您的日期存储为字符串/ varchar),如下所示。同样,正如其他人建议不要将date
数据存储为字符串而是使用datetime
数据类型而不是
SELECT STR_TO_DATE(`Date`, '%m/%d/%Y')
FROM yourtable
修改强>
在这种情况下,我建议不要更新原始表格。而是将此格式化数据存储在view
或单独的表中,如下所示
create view formatted_date_view
as
SELECT ID,STR_TO_DATE(`Date`, '%m/%d/%Y') as 'Formatted_Date'
FROM yourtable
(OR)
create table formatted_date_table
as
SELECT ID,STR_TO_DATE(`Date`, '%m/%d/%Y') as 'Formatted_Date'
FROM yourtable
<强> EDIT1:强>
如果SQL Server使用CONVERT
函数,如CONVERT(datetime, Date,110)
。所以,它将是(这里的110是mm-dd-yyyy格式的风格)
SELECT ID,convert(datetime,[Date],110) as 'Formatted_Date'
FROM yourtable
(OR)
CAST
功能如下(唯一的缺点,你不能使用任何特定的样式来格式化日期)
SELECT ID, cast([Date] as datetime) as 'Formatted_Date'
FROM yourtable
答案 1 :(得分:0)
MS SQL Server解决方案:
您正在尝试使用哪种SQL?
MSSQL Server 2008 R2
您可以在Convert
字段中使用date
功能。您必须指定日期格式样式
对于mm/dd/yyyy
格式,样式值为101
。
使用样式值,您的更新语句可以是:
UPDATE table_name
SET date = CONVERT( VARCHAR, date, 101 )
参阅:
MySQL解决方案:
它需要保留在
varchar
或int
且日期为yyyymmdd
,我需要将数千行数据更改为mmddyyyy
格式的
使用date
更改为str_to_date
类型,然后使用date_format
再次更改为字符串。
UPDATE table_name
SET date = DATE_FORMAT( STR_TO_DATE( date, '%Y%m%d' ), '%m%d%Y' )
从20140911
转换为yyyymmdd
格式时,值mmddyyyy
会将前导0
保留为09112014
。
加分问题 :如果
91212
等09/12/2012
等数据在尝试转换此列时会导致问题吗?或类似1381
的内容应该是08/01/2013
您可以使用str_to_date( '91212', '%c%e%y' )
将其转换为有效的date
对象。但MySQL虽然定义为支持单个数字month
和date
数字,但它无法正确解析此类日期,并在此类格式上返回NULL
。
mysql> select str_to_date( '91212', '%c%e%y' ) s1, str_to_date( '091212', '%c%e%y' ) s2;
+------+------------+
| s1 | s2 |
+------+------------+
| NULL | 2012-09-12 |
+------+------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '91212' for function str_to_date |
+---------+------+------------------------------------------------------------+
1 row in set (0.00 sec)