【问题标题】:How can I insert time in table 2 that matches time in table 1如何在表 2 中插入与表 1 中的时间匹配的时间
【发布时间】:2014-06-11 03:46:20
【问题描述】:
 INSERT INTO purchase_record
        (purchased_from_id, purchase, paid, balance, bank, cheque_no, date,
        cheque_status,time)
 VALUES (
        (SELECT purchased_from_id FROM purchased_from WHERE name = 'Hassan Izhar'),
        (SELECT total FROM purchase_receipt WHERE purchase_receipt_id = '0000001'),
        10000,
        (SELECT balance FROM purchase_receipt WHERE purchase_receipt_id = '0000001'),
        'UBL',
        '1234567',
        '10-JUN-1014',
        'Cleared',
        '(SELECT SUBSTRING(convert(varchar, time,108), 1, 5) FROM purchase_receipt WHERE purchase_receipt_id = ''0000001'')');

我尝试了这个查询,但出现了以下错误:

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.

【问题讨论】:

  • 您的最后一个值是字符串文字,而不是查询的结果

标签: sql sql-server-2008 datetime


【解决方案1】:

您的日期字段的数据类型是什么?如果是 DATETIME 那么它的日期范围是 1753 年 1 月 1 日到 9999 年 12 月 31 日,您过去的日期是“10-JUN-1014”,这超出了此数据类型的范围。如果要存储此日期,则应使用数据类型为 DATATIME2

还要记住在 SQL 中传递日期的最佳格式是 YYYY-MM-DD。

【讨论】:

    【解决方案2】:

    您需要构造正确连接的 SQL Select 语句并将其插入到您的表中,如下所示:

     INSERT INTO purchase_record
            (purchased_from_id, purchase, paid, balance, bank, cheque_no, date,
             cheque_status,time) 
     SELECT f.purchased_from_id, r.total, r.balance, 10000,'UBL','1234567',
            '10-JUN-1014', 'Cleared', SUBSTRING(convert(varchar, r.time, 108), 1, 5)
       FROM purchased_from f
            INNER JOIN purchase_receipt r ON f.purchaser_id = r.purchaser_id
      WHERE f.purchase_receipt_id = '0000001';
    

    请注意,在上述语句中,您需要正确定义加入条件。我放了一个占位符ON f.purchaser_id = r.purchaser_id(这显然是不正确的,因为我不知道您的数据库架构)。请找出您的 purchase_from 和 purchaser_receipt 表是如何链接的,并使用适当的列进行连接

    【讨论】:

      【解决方案3】:

      您的日期时间格式不符合 SQL 格式..

      10-JUN-1014 应该是 YYYY-MM-DD 1014-06-10

      【讨论】:

        【解决方案4】:

        假设purchase_record 表上的time 列是Time 类型,请尝试以下操作:

        -- Get Purchased From Id
        DECLARE @PurchasedFromId AS INT
         SELECT @PurchasedFromId = purchased_from_id
           FROM purchased_from
          WHERE name = 'Hassan Izhar'
        
         INSERT INTO purchase_record
                (purchased_from_id, purchase, paid, balance, bank, cheque_no, date,
                cheque_status, time)
         SELECT @PurchasedFromId AS Purchased_From_Id,
                total AS purchase,
                10000 AS Paid,
                balance,
                'UBL' AS Bank,
                '1234567' cheque_no,
                '10-JUN-1014' as [Date],
                'Cleared' AS Cheque_Status,
                 CONVERT(Time, [time], 108) AS [Time] -- Use 114 instead of 108 for 24 hour
           FROM Purchase_Receipt
          WHERE Purchase_Receipt_Id = '0000001'
        

        如果Purchase_Receipt 表中的timePurchase_Record 表中的time 相同,则不需要CONVERT

        【讨论】:

          猜你喜欢
          • 2023-02-08
          • 2019-04-16
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 2015-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多