【问题标题】:SQL - VARCHAR to date where the separator is a period not a dash SQLSQL - VARCHAR 到日期,其中分隔符是句点而不是破折号 SQL
【发布时间】:2020-10-22 21:18:48
【问题描述】:

我有一个 VARCHAR 字段,实际上在我的 SQL 表中有很多字段,其中日期是 VARCHAR,格式如下 YYYY.MM.DD

我从 VARCHAR(REPLACE(mc.CANXREASONDATE, '.', '-') 开始,但我不知道如何将其更改为日期

我已经google了,但找不到答案

任何帮助将不胜感激

【问题讨论】:

  • 您的 SQL 数据库是什么(例如 MySQL、SQL Server、Oracle、Postgres 等)? SQL 中的日期操作是高度特定于数据库的。
  • 不知道为什么您的搜索引擎不工作,但我有我搜索时需要的所有结果:更改列类型(您的数据库)

标签: sql sql-server date format varchar


【解决方案1】:

尝试cast()约会:

CAST(REPLACE(mc.CANXREASONDATE, '.', '-' AS DATE) 

格式 YYYY-MM-DD 是一种 ISO 8601 标准日期格式,大多数但并非所有数据库都能识别。

如果你真的想改变日期列本身,你可以使用ALTER TABLE,语法如下:

ALTER TABLE mc ALTER COLUMN CANXREASONDATE DATE

当然,这些语句的确切语法可能因数据库而异。但这应该会给你一些方向。

编辑:

在 SQL Server 中,您可以使用以下方法查找错误值:

SELECT mc.CANXREASONDATE
FROM mc
WHERE TRY_CAST(REPLACE(mc.CANXREASONDATE, '.', '-' AS DATE) IS NULL;

您可以在查询中使用TRY_CAST() 或修复数据。

【讨论】:

  • 使用 SQL server 尝试 select CAST(REPLACE(mc.CANXREASONDATE, '.', '-' ) as DATE) from [ACTA].[MATERIAL_CHAR] mc 得到以下错误消息 241,级别 16 , State 1, Line 1 从字符串转换日期和/或时间时转换失败。列 canxreasonedate 是 (VARCHAR(10),null) 所以我假设空值导致它失败
  • try_cast 在我们的 f SQL server 版本中不是一个有效的函数
  • @lyng 。 . .那么您没有使用受支持的 SQL Server 版本——或者您的兼容模式设置为某个不受支持的版本。
  • 它的 SQL Server 2008 我认为这就是它无法正常工作的原因,我们正在升级
  • @lyng 。 . .如果您不能等到升级,那么日历表可能是最好的解决方案。
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2020-09-06
相关资源
最近更新 更多