【问题标题】:Data Conversion and Extraction数据转换和提取
【发布时间】:2016-06-12 17:35:16
【问题描述】:

我的表有一个 nvarchar 数据类型的字段。该字段包括字母数字字符和日期。如何从字段中提取日期部分?

【问题讨论】:

    标签: sql reporting-services type-conversion


    【解决方案1】:

    使用CAST 进行日期类型转换。

    SELECT CAST(tstamp AS DATE)
    

    CAST 在大多数 SQL 引擎(SQL Server、PostgreSQL、MySQL)上的工作方式完全相同,

    【讨论】:

      【解决方案2】:

      这取决于数据的样子。例如:

      declare @field varchar(100)
      select @field = 'text text 2000/01/01 text text'
      
      select convert(date,SUBSTRING(@field,CHARINDEX('/',@field,0)-4,10))
      

      如果您知道日期以 yyyy/mm/dd 格式存储,您可以使用上面的代码 - 找到第一个斜线,从斜线的位置剪切字符串 - 长度为 10 的 4。

      再具体一点,举个例子,告诉我们你用的是什么sql server,我们可以帮你更多。

      【讨论】:

      • 每当日期为 mm/dd/yyyy 格式时,此方法都有效。当日期为 longdate 格式时,我收到“从字符串转换日期和/或时间时转换失败”错误。以下是一些示例: >2016 年 2 月 29 日。 >2/29/2016。 >文本文本 2/29/2016 文本。 >文本文本文本2016年2月29日文本文本
      • @Anonymous 如果格式为 mm/dd/yyyy,则从该位置减去 2,而不是 4:convert(date,SUBSTRING(@field,CHARINDEX('/',@field,0)-2,10)) 但是如果有不同的格式,那么这将是一个非常长和复杂的查询。 .. 一般可以通过这几个函数来实现 - SUBSTRING 删除日期,CHARINDEX 查找可以识别日期的字符,CONVERTCAST 将其转换为DATEDATETIME .请参阅参考资料 [msdn.microsoft.com/en-us/library/ms187748.aspx]
      • @Anonymous 而且您可能不想听到它,但首先 - 一个列不应该包含您需要单独访问的数据...
      • 该字段包含学生的笔记。所有学生都没有遵循正确的格式,所以我一直在转换数据。
      • @Anonymous 应用程序应该管理这个。不是数据库。您将必须构建那么多查询,有多少可能的格式。最坏的情况是“2016 年 2 月 29 日” - 要在字符串中找到它,您需要列出所有 12 个月并在其中搜索它们。并祈祷,月份的名称不包含在字符串中的其他位置......如果有两个或多个日期怎么办? ...这只能通过非常复杂的程序来实现。
      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 2021-05-22
      • 1970-01-01
      相关资源
      最近更新 更多