2017-05-30 - > 20170530
SET SQL_SAFE_UPDATES = 0;
UPDATE stations.attenuation_smoothed
SET date = DATE_FORMAT(date, '%Y/%m/%d')
WHERE counter = 1;
SET SQL_SAFE_UPDATES = 1;
我也尝试过更新.....复制
但该表显示没有效果,查询运行时没有错误说
0 row(s) affected Rows matched: 1 Changed: 0 Warnings: 0
答案 0 :(得分:0)
MySQL不会“计算”未被修改为“受影响”的行。也就是说,如果我们将值分配给导致行“无变化”的列,则该行不包括在“受影响的行”计数中。
该问题未指定名为date
的列的数据类型。
如果那是DATE
数据类型,那么我们希望UPDATE
语句(如问题中所示)不修改任何行,并返回“0行受影响”。
如果是字符数据类型,并且已经存储在列中的值采用格式'YYYY/MM/DD'
表示有效日期值,那么我们也期望返回为“0行受影响”。
为了说明该声明没有对该行进行任何更改的原因,请考虑以下演示:
SELECT DATE_FORMAT('2018-04-12','%Y/%m/%d') AS str
, DATE_FORMAT('2018-04-12','%Y/%m/%d') + INTERVAL 0 DAY AS dt
返回:
str dt
---------- ----------
2018/04/12 2018-04-12
DATE
数据类型是内部表示。从内部表示转换为字符串时,MySQL使用标准格式 YYYY-MM-DD
。
演示查询使用显式调用DATE_FORMAT
将DATE
(或DATETIME
或TIMESTAMP
)值转换为指定格式的字符串表示形式。
请注意,字符串表示中出现的破折号分隔符实际上不是DATE
值的一部分,这些是出现在字符串表示中的字符。
当我们将字符串分配给DATE列时,会将该字符串隐式转换为DATE
数据类型。 MySQL对分隔符和格式相当宽容。考虑
SELECT DATE( '2018/4/12' ) AS dt1
, DATE( '2018.4+12' ) AS dt2
这表明将字符串值转换为DATE
数据类型。
dt1 dt2
---------- ----------
2018-04-12 2018-04-12
要在结果集中返回DATE
值,MySQL会将DATE
值转换回字符串表示形式,并将其转换回字符串表示形式(以MySQL默认格式)。
为了说明在date
是字符列的情况下为什么“没有变化”,请考虑:
SELECT DATE('2018/04/12') AS dt
, DATE_FORMAT( DATE('2018/04/12') ,'%Y/%m/%d') AS str
返回
dt str
---------- ----------
2018-04-12 2018/04/12
我不确定是否有任何回答问题的答案。我甚至不确定是否有问题。