【问题标题】:How to remove sql server date time default value如何删除sql server日期时间默认值
【发布时间】:2014-03-11 04:38:24
【问题描述】:

您好,我对 sql 很陌生,我一直在获取 sql 默认值 1900-01-01 00:00:00.000。我只希望该字段为空。我想如果我放 '' 空字符串,它会使用它而不是默认值。我评论了我认为问题所在的那一行。我尝试过其他方法,例如 ISNULL 和 Convert,但这不起作用。在此先感谢您,如果您能解释默认日期的工作原理以及如何覆盖它,将不胜感激。

DECLARE @custAccount nvarchar(20)                        

SET @custAccount='CUS07869'

SELECT 'SM' as [Origin]
  ,'SN' as [Action Code]
  ,ST.PurchOrderFormNum as [Order Number]
  ,SL.ITEMID AS [LINE ITEM]
  ,SL.QTYORDERED as [Quantity]
  ,S.SHIPMENTDATE as [Action Date]
  ,S.TRACKINGNUMBER as [TRACKING]
  ,ISNULL(S.SHIPMENTDATE, '') as [DATE_SHIPPED]
  ,S.SHIPMETHOD as [Carrier]
FROM SalesTable ST                         
  INNER JOIN GBP_Shipping S                         
  ON ST.SalesId=S.SalesId AND ST.DataAreaId=S.DataAreaId                        
  INNER JOIN SalesLine SL              
  ON ST.SalesId=SL.SalesId AND ST.DataAreaId=SL.DataAreaId                        
WHERE ST.CUSTACCOUNT=@custAccount                         
  AND S.SHIPMENTDATE = convert(varchar, getdate(), 111)             
  AND ST.salestype!=4              
UNION

SELECT   'SM' as [Origin]
  ,'AN' as [Action Code]
  ,ST.PurchOrderFormNum as [Order Number]
  ,SL.ITEMID AS [LINE ITEM]
  ,SL.QTYORDERED as [Quantity]
  ,replace(convert(varchar, getdate(), 111), '/', '') as [Action Date]
  ,'' as [TRACKING]
  ,'' as [DATE_SHIPPED]   --I think this is the problem           
  ,'' as [Carrier]          
FROM SalesTable ST                                         
  INNER JOIN SalesLine SL              
  ON ST.SalesId=SL.SalesId AND ST.DataAreaId=SL.DataAreaId                        
WHERE ST.CUSTACCOUNT=@custAccount                         
  AND ST.CREATEDDATE = convert(varchar, getdate(), 111)        

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    在联合的第一部分设置列中数据的类型。

    试试

    ,case when S.SHIPMENTDATE is null then ''
    else Convert(VarChar(10),S.SHIPMENTDATE)
    end as DATE_SHIPPED
    

    改为 的

    ,ISNULL(S.SHIPMENTDATE, '') as [DATE_SHIPPED]
    

    【讨论】:

    • 非常感谢您的工作。我也只是改变了'。在 varchar(10) 和 S.SHIPMENTDATE 之间转换为转换函数中的 ','。但除此之外,它工作得很好,所以再次感谢我真的很感激。
    【解决方案2】:

    SQL 没有“空”的默认日期——你必须在那里设置一些东西。在幕后,它们被存储为二进制值,二进制值 0 被转换为某种东西;在这里,我猜你正在使用 smalldatetime,我有理由确定 0 = Jan 1, 1900。 (日期时间为 0 可以让您在 1753 年获得一些东西,当时公历正式开始。我不确定他们为 SQL 2008 新的日期/时间数据类型翻转了什么硬币。)

    如果您想要“无日期”,您可能必须使用 NULL 值,并在与 isnull 函数相关的任何地方检查它们。也许很烦人,但恕我直言,这是 SQL 中 NULL 值最合法的用法之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 2022-08-15
      • 2020-04-03
      • 2018-03-17
      • 2010-12-19
      • 2019-01-27
      • 1970-01-01
      相关资源
      最近更新 更多