【问题标题】:Adding a number to a datetime to get new date SQL Server将数字添加到日期时间以获取新日期 SQL Server
【发布时间】:2018-09-13 09:48:05
【问题描述】:

我正在尝试获取下面的查询,以根据该列中的值为“DESIRED TRANSIT TIME”列分配一个数值 - 如果它以 A 开头,则为 10,如果以 C 开头,则为 5。从那里我想要将该编号添加到 REVISED_EX_FACTORY 以获得新的出厂设置。我从来没有尝试过这个,使用下面的查询我得到的结果是日期加上文本'DESIRED TRANSIT TIME'——这很有意义,因为它是一个字符串。如何获取列中的值而不是第 20 行中列的文本名称?有人告诉我转换 datetime 值以摆脱时间组件是一个好方法。

理想的结果是在日期上增加 5 天或 10 天,具体取决于 'DESIRED TRANSIT TIME' 中的值

SQL:

USE PDX_SAP_USER

GO 

SELECT E.team_member_name [EMPLOYEE], 
       K.business_segment_desc [BUSINESS SEGMENT],
       G.order_status [GPS ORDER STATUS],
       H.po_type [PO TYPE],
       G.order_no [GPS ORDER NO],
       I.po_number [SAP PO NUMBER],
       I.shipping_instruct [SAP SHIP MODE],
       G.shipping_type [GPS SHIP MODE], 
       CASE 
            WHEN I.shipping_instruct LIKE 'A%'
            THEN '10'
            WHEN I.shipping_instruct LIKE 'C%'
            THEN '5'
       END  [DESIRED TRANSIT TIME], 
       CONVERT(VARCHAR(12),I.revised_ex_factory,101) [LAST CONFIRMED DATE ], 
       CONVERT(VARCHAR(12),I.revised_ex_factory,101) + 'DESIRED TRANSIT TIME' AS 'PROPOSED ETA',
       CONVERT(VARCHAR(12),S.po_estimated_deliv_date,101) [CURRENT DELIV DATE], 
      -- 'days_diff'
       I.material [MATERIAL],
       M.description [DESCRIPTION],
       I.stock_category [STOCK CATEGORY],
       I.po_ordered_quantity [PO ORDERED QUANTITY],
       I.po_recvd_quantity [PO RECVD QUANTITY],
       I.po_balance_quantity [PO BALANCE QUANTITY], 
       I.po_intransit_quantity [PO INTRANSIT QUANTITY], 
       I.plant_code [PLANT], 
       I.direct_ship_code [DS CODE],   
       I.comment [COMMENT]


FROM   (SELECT    order_no,
                  order_status, 
                  shipping_type

FROM asagdwpdx_prod.dbo.SimoxOrder1

UNION ALL

SELECT            order_no,
                  order_status, 
                  shipping_type

FROM asagdwpdx_prod.dbo.SimoxOrder2

UNION ALL 

SELECT            order_no,
                  order_status, 
                  shipping_type

FROM asagdwpdx_prod.dbo.SimoxOrder3) G 

JOIN   pdx_sap_user..vw_po_header H ON G.order_no = H.ahag_number
JOIN   pdx_sap_user..vw_po_item I ON H.po_number = I.po_number 
JOIN   pdx_sap_user..vw_po_size S ON I.po_number = S.po_number 
AND    I.po_item_number = S.po_item_number 
JOIN   pdx_sap_user..vw_mm_material M ON I.material = M.material 
JOIN   pdx_sap_user..vw_kd_business_segment K ON M.business_segment_code = K.business_segment_code
JOIN   adi_user_maintained..scm_po_employee_name E ON I.po_number = E.po_number 


WHERE  I.po_balance_quantity > 0 
AND    I.del_indicator NOT IN ('L','S')
AND    H.PO_TYPE NOT IN ('01','UB')
AND    I.shipping_instruct IN ('A1','A2','A5','C1','C2','C3')

示例结果:

04/30/2016DESIRED TRANSIT TIME 

【问题讨论】:

  • 所以你希望它返回"04/30/2016DESIRED TRANSIT TIME"?它目前返回的是什么?
  • 对任何混淆表示歉意 - 这就是它目前真正带来的 - 在这种情况下,CASE 函数返回值 5 - 因此我希望计算返回 05/04/2016 - 这样做帮忙?

标签: sql sql-server datetime type-conversion case


【解决方案1】:

所以你有两个选择。第一个是复制您第二次的CASE 语句,并将其与日期连接起来。这可能是最直接的,尽管您最终会复制该代码。这是一个小的重复,但仍然是一个。如果这让您感到困扰,或者您还需要在查询的其他地方使用它,您需要将整个内容包装在一个子查询中,以便您可以引用 case 语句,就好像它是一个不同的列一样。例如

select
    ...
    DesiredTransitTime = 
        case
            when I.shipping_instruct LIKE 'A%'
            then '10'
            when I.shipping_instruct LIKE 'C%'
            then '5'
        end,
    ProposedETA = convert(varchar(12),I.revised_ex_factory,101) +
        case
            when I.shipping_instruct LIKE 'A%'
            then '10'
            when I.shipping_instruct LIKE 'C%'
            then '5'
        end
    ...

select 
    [DESIRED TRANSIT TIME],
    [PROPOSED ETA = StringDate + [DESIRED TRANSIT TIME]
    ...
from 
(
    select 
        StringDate = convert(varchar(12), I.revised_ex_factory,101) ,
        [DESIRED TRANSIT TIME] = 
            case
                when I.shipping_instruct LIKE 'A%'
                then '10'
                when I.shipping_instruct LIKE 'C%'
                then '5'
            end,
    ...
) a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    相关资源
    最近更新 更多