如何在表2中插入与表1中的时间匹配的时间

时间:2014-06-11 03:46:21

标签: sql sql-server-2008 datetime

 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.

4 个答案:

答案 0 :(得分:1)

您的日期字段的数据类型是什么?如果它 DATETIME 那么它的日期范围是 1753年1月1日至9999年12月31日,您已经过的日期是' 10-JUN-1014'这个数据类型的范围超出范围。如果您想存储此日期,则应将数据类型用作 DATATIME2

另外请记住,在SQL中传递日期的最佳格式是YYYY-MM-DD。

答案 1 :(得分:0)

您需要构造正确连接的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表是如何链接的,并使用适当的列进行连接

答案 2 :(得分:0)

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

10-JUN-1014应为YYYY-MM-DD 1014-06-10

答案 3 :(得分:0)

假设time表上的purchase_record列的类型为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'

如果time表中的Purchase_Receipttime表中的Purchase_Record相同,则无需CONVERT