今天需要把数据库历史数据中的日期由原来的 yyyy/MM/dd 改为 yyyy-MM-dd,用Java直接我就改好了,但是要写SQL语句居然毫无头绪。百度一番,连SQL怎么调用函数都忘掉了,太辣鸡了吧。
通过百度,大家一致都说用COVERT函数,实现的时候发现,COVERT只可以操作日期类型的数据,而数据库原来存储这个日期的类型是字符串,最后用了REPLACE函数,具体实现如下:
UPDATE table
SET column_date = (select REPLACE(column_date, '/', '-'))
WHERE *** = ***
COVERT函数也能用,但是如果需要只保存年月日的话,需要使用date类型或者varchar存储结果,否则时分秒会自动以0补充
UPDATE t_test
SET date_new = (select CONVERT(varchar(10), date_date, 120))
varchar(10)就确定只保存字符串前十位,如果需要时分秒可以设置更长的长度。具体如下图:
CONVERT() 函数
定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据
语法
CONVERT ( data_type(length) , data_to_be_converted , style )
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
参考链接:https://www.w3school.com.cn/sql/func_convert.asp
REPLACE() 函数
定义和用法
REPLACE()返回用另一个字符串值替换原字符串中出现的所有指定字符串值之后的字符串。
语法
REPLACE ( string_expression , string_pattern , string_replacement )
①string_expression是原字符串。 string_expression 可以是字符或二进制数据类型 。
②string_pattern是要查找的子字符串(指定字符串值)。 string_pattern 可以是字符或二进制数据类型 。 string_pattern 不能为空字符串 (''),不能超过页容纳的最大字节数 。
③string_replacement是替换字符串(另一个字符串值)。 string_replacement 可以是字符或二进制数据类型 。
返回值:
如果其中的一个输入参数数据类型为 nvarchar,则返回 nvarchar;否则 REPLACE 返回 varchar 。
如果任何一个参数为 NULL,则返回 NULL。
如果 string_expression 的类型不是 varchar(max) 或 nvarchar(max),则 REPLACE 将返回值截断为 8000 个字节 。 若要返回大于 8,000 字节的值,则必须将 string_expression 显式转换为大值数据类型 。
参考链接:https://www.cnblogs.com/feiyu721/p/11248839.html