SQL 将字符串(日期或文本)转换为日期

2024-02-23

我有一个数据库,其中有一列名为stringNextDue包含日期(英国格式)和文本(例如“逾期”、“已完成”)等数据

我正在尝试创建一个视图,显示从现在起一个月内到期的课程:

WHERE 
    CONVERT(DATETIME, mt.stringNextDue , 103) < DATEADD(MONTH, 1, GETDATE())

这会引发错误:

从字符串转换日期和/或时间时转换失败。

这可能是由于以下事实:stringNextDue可能包含实际的文本字符串。

我尝试使用

WHERE 
    ISDATE(mt.NextDateString) = 1 
    AND CONVERT(DATETIME, mt.stringNextDue , 103) < DATEADD(MONTH, 1, GETDATE())

But ISDATE仅接受美国日期格式,因此忽略许多实际日期作为字符串

Tried set dateformat 'dmy',这修复了IsDate问题,但它不能在视图中使用。

有什么建议么?

服务器更新不是一个选项


如果您无法使用新的TRY_CONVERT你可以使用这样的函数:

注意:这不会捕获像 31.06.2016 这样的错误日期,您必须修改BETWEEN 1 AND 31如果你需要这个...

注意2:如果您的文本可能包含 xml 中禁止的字符,您应该替换< with &lt;, > with &gt; and & with &amp; ...

CREATE FUNCTION dbo.TestDate(@TestString VARCHAR(100))
RETURNS DATE
AS
BEGIN
    DECLARE @x XML=CAST('<x>' + REPLACE(@TestString,'.','</x><x>') + '</x>' AS XML)

    DECLARE @p1 VARCHAR(10) = @x.value('x[1]','varchar(10)');
    DECLARE @p2 VARCHAR(10) = @x.value('x[2]','varchar(10)');
    DECLARE @p3 VARCHAR(10) = @x.value('x[3]','varchar(10)');

    IF    LEN(@p1)=2 AND ISNUMERIC(@p1)=1 AND CAST(@p1 AS INT) BETWEEN 1 AND 31
      AND LEN(@p2)=2 AND ISNUMERIC(@p2)=1 AND CAST(@p2 AS INT) BETWEEN 1 AND 12
      AND LEN(@p3)=4 AND ISNUMERIC(@p3)=1 AND CAST(@p3 AS INT) BETWEEN 1900 AND 2100

    RETURN CONVERT(DATETIME, @TestString , 103);

    RETURN NULL;
END
GO

SELECT
  dbo.TestDate('overdue') AS SureNoDate
 ,dbo.TestDate('01.04.2016') AS EuropeanDate
 ,dbo.TestDate('2016.04.01') AS WrongFormat
 ,dbo.TestDate('01.13.2016') AS BadDate;
GO

DROP FUNCTION dbo.TestDate;

结果

SureNoDate  EuropeanDate    WrongFormat BadDate
NULL        2016-04-01      NULL        NULL

您可以传回一个有效日期(RETURN GETDATE()?) 代替RETURN NULL供你在外面比较。这取决于你的需求...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 将字符串(日期或文本)转换为日期 的相关文章

随机推荐

  • go 基准测试中 allocs/op 和 B/op 是什么意思?

    当我运行基准测试时go test v bench benchmem 我看到以下结果 f1 10000 120860 ns op 2433 B op 28 allocs op f2 10000 120288 ns op 2288 B op 2
  • Python - 使用点列表从网格 NetCDF 中提取数据,无需 for 循环

    以下示例使用东风的 Unidata 样本 netCDF 数据集 可以从这里下载的 https www unidata ucar edu software netcdf examples sresa1b ncar ccsm3 example
  • 使用 Javascript 的 Chromeless 播放器中的全屏选项?

    我正在使用 Youtube Javascript API 来开发 chromeless 播放器 你能告诉我如何在播放器上使用 Javascript 添加 开发 全屏控制 吗 YouTube api 中当前不存在此内容 相反 您可以使用 ja
  • 如何每年自动更改年龄

    我写了这个程序 但我有一个变量 年龄 我该如何做才能不必每年改变狗的年龄 换句话说 它应该自动改变 你应该保存生日 而不是保存年龄 这样可以在需要时计算年龄
  • ng2-charts + 如何自定义X轴标签的位置?

    我在用着https valor software com ng2 charts https valor software com ng2 charts 用于生成以下图表 Expected Graph Actual Graph Right n
  • Jest&material-ui:如何测试特定图标的存在?

    我最近将一个应用程序迁移到我喜欢的 mui v4 还完成了更新我们使用 jest enzyme 运行的测试套件 例如我现在喜欢mount代替shallow 一个问题是我找不到一种方法来测试图标的存在 在撰写本文时 我正在使用所有最新版本的m
  • 如何在进程结束后自动关闭`qemu`的执行?

    我想要的是qemu打开并显示输出后的窗口运行后自动关闭pintOS 就像我运行命令时一样pintos run alarm multiple in tcshshell qemu 显示过程开始 然后一些alarm notifications然后
  • 无法找到 ASP.NET CodeDom 提供程序错误

    我在服务器上部署时遇到 ASP NET 错误 无法找到 CodeDom 提供程序类型 Microsoft CodeDom Providers DotNetCompilerPlatform CSharpCodeProvider Microso
  • 如何使用 LaunchDaemons (launchd) 启动 Program.app?

    我放置了以下内容com apple test plist文件夹中的文件 系统 库 LaunchDaemons
  • 跨服务器SQL

    我想将数据从一台服务器的数据库移植到另一台服务器的数据库 这两个数据库都位于不同的 mssql 2005 服务器上 复制可能不是一个选项 因为目标数据库是按 时间间隔 从头开始生成的 我最好会做类似的事情 insert from db1 t
  • 如何使用 Razor 引擎在 MVC 5 项目上添加日期选择器 Bootstrap 3?

    我需要一些关于如何安装的指南日期选择器 http eternicode github io bootstrap datepicker 使用 Razor 引擎的 MVC 5 项目上的 Bootstrap 3 我找到了这个链接here http
  • Matplotlib Figsize 不受尊重[重复]

    这个问题在这里已经有答案了 我想用 matplotlib 绘制一个正方形图 也就是说 我希望整个图形是正方形的 当我使用以下代码时 生成的图像的宽度仍然比高度大一点 为什么 matplotlib 不尊重我提供的 Figsize import
  • 当我们有客户端会话时,为什么需要 JWT?

    据我所知 JWT 是无状态令牌 它存储有关客户端声明的签名信息 并通过授权 HTTP 标头传递到服务器 我的问题是 当我们已经有了客户端会话时 为什么还需要 JWT https github com mozilla node client
  • 将数字转换为时间

    如何将数字 1 33408564814814 转换为时间 32 01 05 如果您确实想要结果作为字符串 您可以使用如下函数 set serveroutput on format wrapped declare function days
  • HDFS 文件系统的 URL

    我在 HDFS 中有一些数据 user Cloudera Test 我可以通过运行很好地查看记录hdfs dfs cat Test 现在同一个文件 我需要在 scala 中将其读取为 RDD 我在 scala shell 中尝试了以下操作
  • 如何在pyspark中将DenseMatrix转换为spark DataFrame?

    除了以下使用 Scala 的示例之外 我没有找到任何 pyspark 代码将矩阵转换为 Spark 数据帧 有谁知道如何使用 python 代替 如何将 mllib 矩阵转换为 Spark 数据帧 https stackoverflow c
  • Activity.finish() 已调用,但 Activity 仍加载在内存中

    当我在调试器上运行我的应用程序时 我得到主线程和 3 个活页夹线程 单击按钮 我拨打电话Activity finish 看起来它会在 UI 关闭并返回主屏幕时结束 Activity 但是 在调试器中 它仍然将主线程和 3 个绑定器线程显示为
  • 如何在AWS Lambda中加载npm模块?

    我使用基于 Web 的编辑器创建了多个 Lambda 函数 到目前为止 一切都很好 我现在想开始使用模块扩展这些模块 例如 Promise 的 Q 我不知道如何将模块发送到 Lambda 以便我的函数可以使用它们 我已读完在 AWS Lam
  • 在项目中使用同一 DLL 的不同版本

    在我的项目中我必须使用不同版本的AWSSDKdll的 为了做到这一点我采取了帮助这个帖子 https stackoverflow com questions 2460542 using different versions of the s
  • SQL 将字符串(日期或文本)转换为日期

    我有一个数据库 其中有一列名为stringNextDue包含日期 英国格式 和文本 例如 逾期 已完成 等数据 我正在尝试创建一个视图 显示从现在起一个月内到期的课程 WHERE CONVERT DATETIME mt stringNext