【问题标题】:How to extract only date from string in SQL Server如何从 SQL Server 中的字符串中仅提取日期
【发布时间】:2022-07-07 23:20:10
【问题描述】:

我只想从下面的字符串中提取日期,并从这个日期中单独提取年份。

字符串:

'I was born on 1st Jan 1994'

除了 left 或 right 函数之外,我们还有什么函数可以从字符串中提取日期吗?

SELECT RIGHT('I was born on 1st Jan 1994', 12) 

结果:“1994 年 1 月 1 日”

但我需要日期格式的结果。

【问题讨论】:

  • CONVERT 的所有样式都不支持日期有后缀的日期(stth 等)。老实说,您应该修复您的应用程序层,以便它不会首先将值作为这样的句子传递,并将出生日期放在date 列中。
  • 这个问题没有通用的解决方案,它取决于输入的字符串格式。我们怎么知道传入的字符串值不能是“嗨,我有一只猫,名叫 mittens,我在 2003 年买的,然后我在 2009 年 1 月 21 日去看了一部电影,效果不太好,我出生了1994 年 1 月 1 日,2023 年我要开始 SQL 课程”?
  • 我们是否有任何函数可以提取... 是的,文档中有一个完整的部分介绍了您的 sql server 版本中提供的各种字符串函数。但正如已经建议的那样,您的问题可能要复杂得多,具体取决于您的列/字符串中可能找到的值。每个字符串都会效仿你的例子吗?
  • 而这个目标“单独提取年份”与“我需要日期格式的结果”不一致。
  • 稍微绕道......你真的用的是2012吗?距离它的生命终结还有不到一周的时间。是时候考虑升级了。

标签: sql sql-server sql-server-2012


【解决方案1】:

请检查我的代码和结果集是否符合您的要求:我主要使用了 left() 和 right() 以外的其他字符串函数:希望它能解决您的问题。

DECLARE @string VARCHAR(100)
DECLARE @extract VARCHAR(20)
DECLARE @onlydate VARCHAR(20)
SET @string = 'I was born on 1st Jan 1994'
SET @extract = SUBSTRING(@string, CHARINDEX('1st', @string), len(@string))
SET @onlydate = REPLACE(@extract, 'st', '')
SELECT @string as full_text, @extract as extracted_text, @onlydate as only_datetext,CONVERT(date,@onlydate,102) as string_to_date;

结果集

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多