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

将STRING类型pickup_time转为DATETIME时转换失败求助

问题:VARCHAR转DATETIME失败,报错日期转换错误

我是SQL新手,练习时建了runner_orders表:

CREATE TABLE runner_orders (
  "order_id" INTEGER,
  "runner_id" INTEGER,
  "pickup_time" VARCHAR(19),
  "distance" VARCHAR(7),
  "duration" VARCHAR(10),
  "cancellation" VARCHAR(23)
);

INSERT INTO runner_orders
  ("order_id", "runner_id", "pickup_time", "distance", "duration", "cancellation")
VALUES
  ('1', '1', '2020-01-01 18:15:34', '20km', '32 minutes', ''),
  ('2', '1', '2020-01-01 19:10:54', '20km', '27 minutes', ''),
  ('3', '1', '2020-01-03 00:12:37', '13.4km', '20 mins', NULL),
  ('4', '2', '2020-01-04 13:53:03', '23.4', '40', NULL),
  ('5', '3', '2020-01-08 21:10:57', '10', '15', NULL),
  ('6', '3', 'null', 'null', 'null', 'Restaurant Cancellation'),
  ('7', '2', '2020-01-08 21:30:45', '25km', '25mins', 'null'),
  ('8', '2', '2020-01-10 00:15:02', '23.4 km', '15 minute', 'null'),
  ('9', '2', 'null', 'null', 'null', 'Customer Cancellation'),
  ('10', '1', '2020-01-11 18:50:20', '10km', '10minutes', 'null');

想把pickup_time字段改成DATETIME类型,执行这句:

ALTER TABLE runner_orders
ALTER COLUMN pickup_time DATETIME

结果报错:Conversion failed when converting date and/or time from character string.

试过这些方法都没解决:

  • 把日期格式改成不带短横线的'20200101 18:15:34'
  • 把NULL改成0
  • 日期时间中间加T,改成'2020-01-10T00:15:02'
  • 用设计器手动改数据类型

解决办法

问题核心是表里的pickup_time有字符串'null'(不是真正的SQL NULL值),SQL Server没法把这个字符串转成DATETIME。按以下步骤操作:

  1. 先把所有字符串'null'替换成真正的NULL:
UPDATE runner_orders
SET pickup_time = NULL
WHERE pickup_time = 'null';

如果还有空字符串''也影响转换,一起处理:

UPDATE runner_orders
SET pickup_time = NULL
WHERE pickup_time = '' OR pickup_time = 'null';
  1. 再执行修改字段类型的语句:
ALTER TABLE runner_orders
ALTER COLUMN pickup_time DATETIME;

这样就能成功完成类型转换了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:33:16