【问题标题】:SQL VIEWS/ data type conversionSQL VIEWS/数据类型转换
【发布时间】:2017-06-21 07:37:03
【问题描述】:

我正在尝试创建一个视图。视图中的字段之一是 smalldatetime 字符类型。我正在尝试显示某个日期范围内的记录。似乎存在字符类型转换问题。我得到的错误是 “将 varchar 数据类型转换为 smalldatetime 数据类型导致值超出范围。”

这是我的一段代码

CREATE VIEW erep
AS
SELECT [iInvoiceID] as invoice_id
      ,[OrderDate] as rrdate
      ,[cDescription] as product
      ,[fQtyProcessed] as qty
      ,[fUnitPriceExcl] as unitpricenotax
      ,[fUnitPriceIncl] as unitpricewithtax
      ,[fUnitCost] as unitcost
      ,[fTaxRate] as taxrate
      ,[fQuantityLineTotIncl] as totalwithtax
      ,[fQuantityLineTotExcl] as totalnotax
      ,[fQuantityLineTotInclNoDisc] as totalwithtaxnodiscount
      ,[fQuantityLineTotExclNoDisc] as totalnotaxnodisc
      ,[iDeliveryStatus] as deliverystatus
        FROM _bvSalesOrdersFull
  where orderdate >= '2017-01-01 00:00:00' AND orderdate < '2017-31-12 00:00:00';

【问题讨论】:

  • 可能是时区问题。是给 orderdate 列吗?

标签: sql-server


【解决方案1】:

对于您的日期时间文字,请使用明确的格式,无论语言/文化设置是什么:

CREATE VIEW erep
AS
SELECT [iInvoiceID] as invoice_id
      ,[OrderDate] as rrdate
      ,[cDescription] as product
      ,[fQtyProcessed] as qty
      ,[fUnitPriceExcl] as unitpricenotax
      ,[fUnitPriceIncl] as unitpricewithtax
      ,[fUnitCost] as unitcost
      ,[fTaxRate] as taxrate
      ,[fQuantityLineTotIncl] as totalwithtax
      ,[fQuantityLineTotExcl] as totalnotax
      ,[fQuantityLineTotInclNoDisc] as totalwithtaxnodiscount
      ,[fQuantityLineTotExclNoDisc] as totalnotaxnodisc
      ,[iDeliveryStatus] as deliverystatus
        FROM _bvSalesOrdersFull
  where orderdate >= '2017-01-01T00:00:00' AND orderdate < '2017-12-31T00:00:00';

但我不会期望终点是'2018-01-01T00:00:00',除非您打算排除发生在 12 月最后一天的订单。

明确的日期格式为YYYYMMDDYYYY-MM-DD'T'hh:mm:ssYYYY-MM-DD'T'hh:mm:ss.mil。如今,其他一些格式可能运行良好,但历史上 SQL Server 可能会与它们混淆;尤其是YYYY-MM-DD 曾经有过问题,我相信。就像使用空格作为日期/时间分隔符一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多