【问题标题】:SQL how to convert MM-DD-YYYY string value to dateSQL如何将MM-DD-YYYY字符串值转换为日期
【发布时间】:2020-02-19 19:36:57
【问题描述】:

我有一个字符串格式的日期时间变量,格式如下:

01-04-2020 11:50:44:569
01-03-2020 12:50:44:589
01-03-2020 01:50:44:579

如何提取日期部分并选择日期范围?

我尝试使用:

cast(substring(value,1,10) as date) as date1
date1 between '2020-01-01' and '2020-01-05'

但它返回 0 条记录。

但是,此代码对以下格式的日期时间字符串值起作用:

2020-01-03T11:50:24:529Z

它将提取日期部分并将其存储为时间戳并提取范围内的记录,但不适用于第一个示例。

我只是想找到一种将字符串值转换为日期值的方法,我无意混淆任何人。至于样本数据集,我认为问题的第一部分有 3 条记录应该足以进行测试,因为同一个变量下的所有值都是相同的格式。

【问题讨论】:

  • 数据类型是什么?你一直说字符串,但 sql server 中没有这样的数据类型。但这引出了一个问题……为什么要将日期存储为字符数据,而不是使用旨在保存日期的数据类型?
  • 我删除了hive 标签,因为这个问题似乎针对sql-server
  • 嗨@GMB,它似乎是蜂巢。 OP 在 OP 的回答下发表评论。
  • 正确标记您的问题很重要。看来这毕竟不是sql server的问题。
  • @VBoka:我明白了……这至少可以说是模棱两可的!好的,我删除了我的答案,它仅适用于 SQL Server...

标签: sql date datetime hive


【解决方案1】:

看起来该字段只是日期时间格式,我相信简单地转换为日期可能会在这里解决问题:

cast(value as date) between '2020-01-01' and '2020-01-05'

我测试了一个示例字符串,它似乎可以工作:

DECLARE @date char(25)
SET @date = '01-04-2020 11:50:44:569'

select cast(@date as date)

【讨论】:

    【解决方案2】:

    我想我明白了:

    cast(to_date((FROM_UNIXTIME(UNIX_TIMESTAMP(value, "MM-dd-yyyy HH:mm:ss:SSS"), "yyyy-MM-dd HH:mm:ss.SSS"))) as date) as date1
    

    【讨论】:

    • 这是 sqlserver 的解决方案吗?
    • 数据库在 hive/hadoop 上。所以我猜它可能不在sqlserver上?
    • 你有一个 SQL-Server 的标签,人们就它的答案和问题争论不休。在这个问题之前它被标记为 PostgreSQL。这对试图提供帮助的人具有误导性!
    • 对不起,我会修改它。我还在努力适应不同的服务器……
    • 因为它在sqlserver标签旁边
    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 2012-08-04
    • 2011-11-01
    • 2018-02-19
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多