有没有办法在SELECT语句中使用WHERE子句定义列名? 这是我的t-sql代码,
SELECT CONVERT(DATETIME,(
CASE WHEN Operator = 'T' THEN
(SUBSTRING(SendDate,7,4)+'-'+SUBSTRING(SendDate,4,2)+'-'+
SUBSTRING(SendDate,1,2) + SUBSTRING(SendDate,11,9))
ELSE
RecivedSMS.SendDate
END)) AS DefinedDate
WHERE DATEPART(wk, DefinedDate) = 52
你亲切地,非常感谢你的帮助,现在已经。
已发布
的编辑部分CREATE TABLE #TEMP
(
DateField DATETIME,
NumberField VARCHAR(10),
Sender VARCHAR(255)
)
INSERT #TEMP
SELECT DISTINCT(
CONVERT(DATETIME, (
CASE WHEN Operator = 'T'
THEN ( SUBSTRING( SendDate, 7, 4 ) + '-'
+ SUBSTRING( SendDate, 4, 2 ) + '-'
+ SUBSTRING( SendDate, 1, 2 )
+ SUBSTRING( SendDate, 11, 9 )
)
ELSE SendDate
END))) AS Table1.DateField,
SUBSTRING(Table1.Message,7,7) AS NumberField
FROM Table1
INNER JOIN
Table2 ON Table1.Sender = Table2.PhoneNumber,
(
SELECT CONVERT(DATETIME, (
CASE WHEN Operator = 'T'
THEN ( SUBSTRING( SendDate, 7, 4 ) + '-'
+ SUBSTRING( SendDate, 4, 2 ) + '-'
+ SUBSTRING( SendDate, 1, 2 )
+ SUBSTRING( SendDate, 11, 9 )
)
ELSE SendDate
END)) AS DefinedDate
FROM Table1 WHERE Table1.Operator IS NOT NULL
) q
WHERE Operator IS NOT NULL AND SUBSTRING(Table1.Message,1,6) = 'TREE ST' AND DATEPART( wk, q.DefinedDate ) = 52 AND DATEPART(year, q.DefinedDate ) = 2010
SELECT * FROM #TEMP ORDER BY NumberField
DROP TABLE #TEMP
答案 0 :(得分:9)
不是直接但您可以将其包装在子选择中。
SQL声明
SELECT *
FROM (
SELECT CONVERT(DATETIME, (
CASE WHEN Operator = 'T'
THEN ( SUBSTRING( SendDate, 7, 4 ) + '-'
+ SUBSTRING( SendDate, 4, 2 ) + '-'
+ SUBSTRING( SendDate, 1, 2 )
+ SUBSTRING( SendDate, 11, 9 )
)
ELSE RecivedSMS.SendDate
END)) AS DefinedDate
FROM YourTable
) q
WHERE DATEPART( wk, DefinedDate ) = 52
我相信以下内容与你所写的相同:
SELECT q.DefinedDate
, q.NumberField
FROM (
SELECT Sender
, NumberField = SUBSTRING(Table1.Message, 7, 7)
, Operator
, CONVERT(
DATETIME
, (
CASE WHEN Operator = 'T'
THEN SUBSTRING( SendDate, 7, 4 ) + '-'
+ SUBSTRING( SendDate, 4, 2 ) + '-'
+ SUBSTRING( SendDate, 1, 2 )
+ SUBSTRING( SendDate, 11, 9 )
ELSE SendDate
END )) AS DefinedDate
FROM Table1 WHERE Table1.Operator IS NOT NULL
) q
INNER JOIN Table2 ON Table2.PhoneNumber = Tabl1.Sender
WHERE q.NumberField LIKE 'TREE ST%'
AND DATEPART( wk, q.DefinedDate ) = 52
AND DATEPART( year, q.DefinedDate ) = 2010