【问题标题】:SQL Convert NVARCHAR to Datetime on QuerySQL 在查询中将 NVARCHAR 转换为日期时间
【发布时间】:2015-06-18 11:25:09
【问题描述】:

我有一个检索数据的 SQL 函数,但我的数据库有问题,之前处理它的那个人将字段设置为 NVARCHAR 而不是 DATETIME,所以现在我无法整理日期或选择之间的数据范围。

假设我有一个查询:

Select order_confirmation.oc_number as oc,
order_confirmation.count as cnt,
order_confirmation.status as stat,
order_confirmation.po_number as pon,
order_summary.date_delivered as dd,
order_summary.delivery_quantity as dq,
order_summary.is_invoiced as iin,
order_summary.filename as fn,
order_summary.invoice_number as inum,
order_summary.oc_idfk as ocidfk,
order_summary.date_invoiced as di
FROM
order_confirmation,order_summary
where order_confirmation.id = order_summary.oc_idfk
order by order_summary.date_delivered DESC

我想将 order_summary.date_delivered 转换为 DATETIME 格式,以便 ORDER BY 语句能够正常工作。请注意,我不想永久更改数据库结构上的数据类型,只能在查询中更改。我尝试搜索并尝试其他解决方案但无法正常工作,而且我还不熟悉 SQL Server。

谢谢

助手:

【问题讨论】:

  • 只需使用convert(datetime, date_delivered, <type>)。然后使用正确的类型修复您的数据以存储日期/时间值——这不是字符串。
  • 我明白了,将表达式转换为数据类型日期时间的算术溢出错误。我选择了 110 作为类型
  • 使用示例数据设置 SQL Fiddle,也许有人可以帮助您。我们怎么知道你的约会是什么样的?
  • 我的日期看起来像这样 13-06-2013
  • 正确的格式是105。

标签: sql sql-server type-conversion


【解决方案1】:

在您的 order by 子句中使用:

order by convert(datetime,order_summary.date_delivered, X)

其中 X=100,101,102...取决于您希望的格式

Here你可以看到更多关于转换功能的细节

【讨论】:

  • 我建议使用 CONVERT 变体,因为它提供了日期类型。 Cast 不会转换为其他日期格式。
  • 我收到了这条消息。将表达式转换为数据类型 datetime 时出现算术溢出错误。
  • 你把什么数据放进去。它是一个字符串吗?可能由于输入错误而导致一些不匹配。
  • 数据库字段类型是 nvarchar 所以我相信它是一个字符串,在数据库记录上,它是这种格式,13-06-2013 所以我认为应该可以。但是不
【解决方案2】:

更新 基于 Iconic 的优点并希望纠正您的溢出问题 使用格式 105 和您的 CONVERT

Select order_confirmation.oc_number as oc,
order_confirmation.count as cnt,
order_confirmation.status as stat,
order_confirmation.po_number as pon,
order_summary.date_delivered as dd,
order_summary.delivery_quantity as dq,
order_summary.is_invoiced as iin,
order_summary.filename as fn,
order_summary.invoice_number as inum,
order_summary.oc_idfk as ocidfk,
order_summary.date_invoiced as di
FROM
order_confirmation,order_summary
where order_confirmation.id = order_summary.oc_idfk
order by CONVERT(datetime, order_summary.date_delivered, 105) DESC

【讨论】:

  • 我建议使用 CONVERT 变体,因为它提供了日期类型。 Cast 不会转换为其他日期格式。
  • 数据类型是指格式吗?如果是这样,当您仅使用该字段进行排序时,谁在乎格式是什么。
  • 先生也试过了。同样的错误。将表达式转换为数据类型 datetime 时出现算术溢出错误。
  • 这表明您在order_summary.date_delivered 中有一些不是日期的字符串表示形式
  • 这是 nvarchar 和保存在我的数据库中的示例日期,2013 年 6 月 13 日
猜你喜欢
  • 2017-07-15
  • 2012-04-29
  • 1970-01-01
  • 2015-09-23
  • 2021-01-17
  • 2021-05-27
  • 2014-11-19
  • 1970-01-01
  • 2011-09-01
相关资源
最近更新 更多