rq这一列存储的内容是类似: 2023-2-21 这种字符串,现在要将其格式改成date。
ALTER TABLE `ldh`.`dl` CHANGE COLUMN `rq` `rq` DATE NULL ;
但是这一列有部分单元格不是这种类型,比如缺少字段:2023-3这样的,就会报错。
如果要将这种错误值直接替换成空值,应该怎么办?
添加一列,再更新数据,符合日期格式的更新到新列,最后删除旧列改名新列。
不知道你这个问题是否已经解决, 如果还没有解决的话:在报表统计中常有同期对比的需求演示案例需求为:
统计相同月份与周内日期聘用的员工,如:有两个员工都是3月份周一聘用的则可以用分析函数计算次数然后进行过滤语句如下:
SQL>
SQL> select ename,hiredate,to_char(hiredate,'mon day') as 星期
2 from (
3 select ename,hiredate,count(*)over(partition by to_char(hiredate,'mon day')) as ct
4 from emp
5 )
6 where ct >1;
ENAME HIREDATE 星期
---------- ----------- ---------------------------------------------------------------------------
FORD 1981-12-3 12月 星期四
JAMES 1981-12-3 12月 星期四
SQL>
上述语句中要注意以下几点:
对于SQL更改列类型时遇到错误自动删除的问题,可以通过以下步骤解决: 1. 创建一个新列作为替代列。 可以使用以下命令创建一个新列: ALTER TABLE 表名 ADD COLUMN new_column_name DATE; 这将在表中添加一个新的日期类型列。 2. 将原始列中的数据插入到新列中。 可以使用以下命令将原始列中的数据插入到新列中: UPDATE 表名 SET new_column_name = STR_TO_DATE(original_column_name,'%Y-%m-%d'); 这将使用STR_TO_DATE函数将原始列中的数据转换为日期格式,并将其插入到新列中。 请注意,如果原始列中存在无法转换为日期格式的值,该命令将失败并报错。如果遇到这种情况,可以修改原始数据,使其符合日期格式,然后再次运行此命令。 3. 删除原始列。 可以使用以下命令删除原始列: ALTER TABLE 表名 DROP COLUMN original_column_name; 请注意,在此之前,应该先确保在新列中已经成功地存储了所有数据。 4. 重命名新列。 可以使用以下命令将新列命名为原始列的名称: ALTER TABLE 表名 CHANGE new_column_name original_column_name DATE; 这将将新列重命名为原始列的名称,并将其类型更改为日期类型。 请注意,如果在任何时候出现问题,应该及时备份数据,以防止数据丢失。可以使用mysqldump命令备份整个数据库或单个表。