我試圖構建一個SQL SELECT語句執行以下操作:SQL嵌套查詢
SELECT GetDate() Mon, GetDate() Tues
但我也希望能夠把WHERE每一列(週一,週二)的限制。所以我想要這樣的東西,但它是不正確的:
SELECT (GetDate() Mon WHERE (1=1)), (GetDate() TuesWHERE (1=1))
請指點我在正確的方向,謝謝。
我試圖構建一個SQL SELECT語句執行以下操作:SQL嵌套查詢
SELECT GetDate() Mon, GetDate() Tues
但我也希望能夠把WHERE每一列(週一,週二)的限制。所以我想要這樣的東西,但它是不正確的:
SELECT (GetDate() Mon WHERE (1=1)), (GetDate() TuesWHERE (1=1))
請指點我在正確的方向,謝謝。
SELECT (select GetDate() Mon WHERE (1=1)), (select GetDate() Tues WHERE (1=1))
列名:
select
(select getDate() where (1=1)) Mon,
(select getDate() where (2=2)) Tues
你也許想CASE
聲明?
或者你是否試圖得到最近的星期一/星期二/星期三/等?
GetDate()只是檢索當前日期/時間。
因此,所有原始查詢(以及目前爲止的大部分「答案」)都會檢索當前的日期和時間兩次,然後在其上放置「Mon」和「Tue」列標籤。
這真的是你想要的嗎?
這是一個函數,它將日期時間和星期幾作爲輸入。它返回一週當天的最近日期。
它假設DATEFIRST爲7(使週日第1天)。
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[udf_getDateFromDayName]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[udf_getDateFromDayName]
GO
--Set Sunday to be day one
SET DATEFIRST 7
GO
CREATE FUNCTION [dbo].[udf_getDateFromDayName]
(
@dtsMaxDate DATETIME,
@sDayName VARCHAR(8)
)
RETURNS DATETIME
AS
BEGIN
DECLARE @iDayNumber INT, @dtsTemp DATETIME
SET @sDayName = LEFT(UPPER(@sDayName),3)
SET @iDayNumber =
(CASE
WHEN @sDayName = 'SUN' THEN 1
WHEN @sDayName = 'MON' THEN 2
WHEN @sDayName = 'TUE' THEN 3
WHEN @sDayName = 'WED' THEN 4
WHEN @sDayName = 'THU' THEN 5
WHEN @sDayName = 'FRI' THEN 6
WHEN @sDayName = 'SAT' THEN 7
ELSE 0 --Invalid day
END
)
IF @iDayNumber = 0 RETURN NULL
SET @dtsTemp = CAST(FLOOR(CAST(@dtsMaxDate AS FLOAT)) AS DATETIME)
WHILE DATEPART(DW,@dtsTemp) <> @iDayNumber
SET @dtsTemp = DATEADD (dd, -1, @dtsTemp)
RETURN @dtsTemp
END
GO
一旦你有了這個功能,你的查詢很簡單。
你可以做這樣的事情:
或者理想,把最大日期變量第一:
DECLARE @dtsNow DATETIME
SET @dtsNow = GETDATE()
SELECT dbo.udf_getDateFromDayName(@dtsNow,'mon') [Mon],
dbo.udf_getDateFromDayName(@dtsNow,'tue') [Tue],
dbo.udf_getDateFromDayName(@dtsNow,'wed') [Wed],
dbo.udf_getDateFromDayName(@dtsNow,'thu') [Thu],
dbo.udf_getDateFromDayName(@dtsNow,'fri') [Fri],
dbo.udf_getDateFromDayName(@dtsNow,'sat') [Sat],
dbo.udf_getDateFromDayName(@dtsNow,'sun') [Sun]
你可以指定你希望得到的結果的類型? – Seibar 2009-01-29 19:55:46
我不明白你想在這裏完成什麼。 – 2009-01-29 19:57:43
Oliver S:您的問題沒有意義,因爲示例查詢不會返回任何有用的信息。描述你真正想要做什麼,人們可能會給你更多相關的答案。 – 2009-01-29 20:23:57