You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQL语句将表中1900-01-01替换为NULL值?

解决datetime字段默认存1900-01-01改为NULL的问题

没问题,咱们一步步来搞定这个需求~首先先纠正你现有UPDATE语句里的小语法错误:多个字段赋值时要用逗号分隔,比如SET animalname = 'Mary', animaltype = 'Husky',不然会报语法错误哦。

针对你的需求,分两种场景来处理:

1. 修改已存在的1900-01-01数据为NULL

如果是要把表中所有(或特定)已经存成1900-01-01的记录改成NULL,其实不需要复杂的CASE语句,直接过滤条件后更新就行:

-- 修改所有符合条件的记录
UPDATE animals_table
SET dategiven = NULL
WHERE dategiven = '1900-01-01';

-- 如果你只想修改特定animalid的记录,加上额外条件
UPDATE animals_table
SET dategiven = NULL
WHERE dategiven = '1900-01-01'
  AND animalid = '123456';

2. 在更新其他字段时,同步处理dategiven字段

如果是像你原来的需求那样,更新animalname和animaltype的同时,把该记录的dategiven如果是1900-01-01改成NULL,这时候CASE语句就派上用场了,但要注意CASE的正确用法——它是用来返回一个值的,不是写在WHERE条件里:

UPDATE animals_table
SET animalname = 'Mary',
    animaltype = 'Husky',
    -- 当dategiven是1900-01-01时设为NULL,否则保留原值
    dategiven = CASE WHEN dategiven = '1900-01-01' THEN NULL ELSE dategiven END
WHERE animalid = '123456';

3. 从源头避免出现1900-01-01

上面的方法是处理已有的数据,更彻底的是从源头解决:检查你的dategiven字段是否允许为NULL,以及是否设置了默认值为1900-01-01。如果是的话,修改表结构:

-- 允许字段为NULL(如果之前不允许的话)
ALTER TABLE animals_table
ALTER COLUMN dategiven DATETIME NULL;

-- 如果字段有默认值1900-01-01,去掉这个默认值
ALTER TABLE animals_table
ALTER COLUMN dategiven DROP DEFAULT;

这样以后插入或更新时,空值就会直接存储为NULL,而不是自动转成1900-01-01了。

内容的提问来源于stack exchange,提问作者Celestialchippy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:16:00