【问题标题】:SQL 'Conversion failed when converting date and/or time from character string.'SQL '从字符串转换日期和/或时间时转换失败。'
【发布时间】:2021-07-22 20:07:20
【问题描述】:

我正在创建从 SQL 数据库到 Azure 数据工厂中存储的管道。

我正在努力确定如何使用以下格式搜索两个日期之间的数据:yyyy-MM-ddTHH:mm:ssZ

我为日期创建了一个变量:date

现在使用以下代码搜索查询:

@concat('SELECT * FROM dbo.Task_History 
WHERE history_timestamp BETWEEN ''2015-01-01T01:00:00Z'' AND CONVERT(datetime2, ''' , variables('date') , ''', 127)')

它给出了一个错误说明:

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

下面是搜索目标数据的目标列

【问题讨论】:

  • 这里的variables('date') 是什么?
  • 当您通过字符串连接构造查询时(但请倾向于使用参数来保持数据和代码分离并避免 SQL 注入)并且查询不工作,请打印出 整个最终查询。您要么自己发现问题,要么将其包含在您的问题中。
  • 我正在寻找如何编辑。谢谢!
  • 无论如何,SQL 数据库中的日期都没有格式。它们是二进制值,就像 int、bigint、bit、decimal 等。像 SSMS 这样的客户端工具使用 ISO861 格式显示它们,因为它是唯一明确的格式,而不是因为日期本身有任何格式
  • @JuanEnriqueBanal 这不是桌子。就是表情。您对 SQL 注入和转换问题持开放态度。不要使用连接。使用文档显示的内容 - 带有强类型参数的字符串插值

标签: sql tsql azure-data-factory


【解决方案1】:

​您可以使用 convertFromUtc() 函数获取新加坡标准时区的当前日期时间。然后您可以使用字符串插值语法来动态构建您的 SQL 查询。

在下面的示例中,我正在尝试构建一个 SQL 查询,它将在日期“2015-01-01T01:00:00Z”和当前日期时间新加坡标准时区之间从“dbo.Task_History”表中查询数据。

设置变量活动以在新加坡标准时区设置当前日期时间值。

使用的表达式:@convertFromUtc(utcnow(),'新加坡标准时间') 使用字符串插值格式生成 SQL 查询:

SELECT * FROM dbo.Task_History WHERE history_timestamp BETWEEN '2015-01-01T01:00:00Z' AND '@{variables('singaPoreDateTime')}'

在此之间,能否请您帮助我理解您为什么要尝试在 SQL 中再次转换到某个时区?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多