计算 SQL 查询中的日期
Calculate date in SQL Query
我正在尝试计算 SQL 查询中的日期,即 date_required 在发送日期中添加天数 - 我目前收到错误列名无效 'despatchdays' .如果发货日为空或“”,那么我希望它默认为 -14。
SELECT order_no, order_line_no, currency, product, address1,description, date_required,
(SELECT despatchdays
FROM scheme.PDBtblSuppliers
WHERE SupplierIDFK = dbo.qryArrears2.supplier) AS despatchdays,
DATEADD(d, despatchdays, date_required) AS despatchdate
FROM dbo.qryArrears2
我如何优化它才能使其正常工作?
我正在使用 SQL 2000。
你不能只 JOIN
table 然后像这样使用它吗:
SELECT
order_no,
order_line_no,
currency,
product,
address1,
description,
date_required,
despatchdays,
DATEADD(d, despatchdays, date_required) AS despatchdate
FROM
dbo.qryArrears2
JOIN scheme.PDBtblSuppliers
ON SupplierIDFK = dbo.qryArrears2.supplier
更新:
您可以像这样将 date_required
转换为 datetime
:
CAST(date_required AS DATETIME)
您可以使用:
SELECT order_no
, order_line_no
, currency
, product
, address1
,description
, date_required
, DATEADD(day, coalesce(pd.despatchdays, -14), date_required) AS despatchdate
FROM dbo.qryArrears2 qa
INNER JOIN scheme.PDBtblSuppliers pd On pd.SupplierIDFK = qa.supplier
但是如果 qryArrears2 中的供应商在 PDBtblSuppliers 中有几行,它可能会给你更多的行。
您还可以在 DATEADD 中移动 despatchdate 查询:
SELECT * FROM (
SELECT order_no
, order_line_no
, currency
, product
, address1
, description
, date_required
, DATEADD(day
, coalesce((SELECT despatchdays FROM scheme.PDBtblSuppliers WHERE SupplierIDFK = qa.supplier), -14)
, date_required
) AS despatchdate
FROM dbo.qryArrears2 qa
) as d
WHERE despatchdate = '20150101'
如果 despatchdays
为 NULL,coalesce(despatchdays, -14)
将用 -14
替换 despatchdays
。
如果 date_required
是一个 (var)char,您应该用 table 中的日期替换它,或者转换为数据(时间): CAST(date_required as date )
我正在尝试计算 SQL 查询中的日期,即 date_required 在发送日期中添加天数 - 我目前收到错误列名无效 'despatchdays' .如果发货日为空或“”,那么我希望它默认为 -14。
SELECT order_no, order_line_no, currency, product, address1,description, date_required,
(SELECT despatchdays
FROM scheme.PDBtblSuppliers
WHERE SupplierIDFK = dbo.qryArrears2.supplier) AS despatchdays,
DATEADD(d, despatchdays, date_required) AS despatchdate
FROM dbo.qryArrears2
我如何优化它才能使其正常工作?
我正在使用 SQL 2000。
你不能只 JOIN
table 然后像这样使用它吗:
SELECT
order_no,
order_line_no,
currency,
product,
address1,
description,
date_required,
despatchdays,
DATEADD(d, despatchdays, date_required) AS despatchdate
FROM
dbo.qryArrears2
JOIN scheme.PDBtblSuppliers
ON SupplierIDFK = dbo.qryArrears2.supplier
更新:
您可以像这样将 date_required
转换为 datetime
:
CAST(date_required AS DATETIME)
您可以使用:
SELECT order_no
, order_line_no
, currency
, product
, address1
,description
, date_required
, DATEADD(day, coalesce(pd.despatchdays, -14), date_required) AS despatchdate
FROM dbo.qryArrears2 qa
INNER JOIN scheme.PDBtblSuppliers pd On pd.SupplierIDFK = qa.supplier
但是如果 qryArrears2 中的供应商在 PDBtblSuppliers 中有几行,它可能会给你更多的行。
您还可以在 DATEADD 中移动 despatchdate 查询:
SELECT * FROM (
SELECT order_no
, order_line_no
, currency
, product
, address1
, description
, date_required
, DATEADD(day
, coalesce((SELECT despatchdays FROM scheme.PDBtblSuppliers WHERE SupplierIDFK = qa.supplier), -14)
, date_required
) AS despatchdate
FROM dbo.qryArrears2 qa
) as d
WHERE despatchdate = '20150101'
如果 despatchdays
为 NULL,coalesce(despatchdays, -14)
将用 -14
替换 despatchdays
。
如果 date_required
是一个 (var)char,您应该用 table 中的日期替换它,或者转换为数据(时间): CAST(date_required as date )