2017-07-09 44 views
0

您可以通過SELECT語句本身的存儲過程將2列合併/映射爲1嗎?SQL Server:您可以通過存儲過程在SELECT語句本身中組合/映射2列爲1嗎?

一種近乎:

SELECT 
    (EXEC @TIMESPAN = #CREATE_24HR_TIMESPAN, [open], [closed]) AS TIMESPAN 
FROM 
    #TEMP 

要設置場景,我有一個表與一對夫婦的列從時間和時間數據類似「早上7點「早上8點」。

我寫了一個存儲過程來將字符串轉換爲範圍爲0..23的24小時時鐘格式。

我兩次打電話這一點,並通過100從時間乘以並添加時間,所以,我想最終708

我想這一點,因爲這將使其易於稍後創建數據透視表...

我想知道有沒有辦法將EXEC與SELECT語句內聯?

我熟悉遊標作爲解決方案,但想知道SELECT是否合理。

回答

1

不,你不能做你想做的。存儲過程不能用於查詢 - 除了使用insert將值存儲到表中以外,主要例外。

取代存儲過程,創建用戶定義的標量函數(請參閱here)。從你對存儲過程的描述中,應該很容易把它變成一個函數。

我的意思是,即使這似乎幾乎沒有必要。你可以只是做:

select datepart(hour, [open]) * 100 + datepart(hour, [closed]) 

(假設他們被存儲爲time)。如果他們是字符串:

select datepart(hour, convert(time, [open])) * 100 + datepart(hour, convert(time, [closed])) 
+0

我有一個偷偷摸摸的懷疑,可能是這種情況..不要認爲REXSTER允許功能。這就是爲什麼我需要存儲過程... – JGFMK

+0

我試圖回答別人的帖子在堆棧溢出,他們的開始臨時表留下了很多不盡人意的地方。是要試圖將其映射到合理的東西。所以列開始爲字符串.. – JGFMK

0

根據變量類型:·有VARCHAR,日期和時間

Declare @open varchar(max), @closed varchar(max) 
--Declare @open DateTime, @closed DateTime 
--Declare @open Time, @closed Time 
Select @open = '7AM' 
, @closed = '8AM' 

select Substring(CONVERT(VARCHAR(MAX),cast(@open as datetime), 8),1,2) 
     + Substring (CONVERT(VARCHAR(MAX),cast(@Closed as datetime), 8),1,2) 

作爲一個有用的asside,我有每當我與日期跳舞這個片段店/測試時間格式:

WITH lv0 AS (SELECT 0 g UNION ALL SELECT 0) 
     ,lv1 AS (SELECT 0 g FROM lv0 a CROSS JOIN lv0 b) -- 4 
     ,lv2 AS (SELECT 0 g FROM lv1 a CROSS JOIN lv1 b) -- 16 
     ,lv3 AS (SELECT 0 g FROM lv2 a CROSS JOIN lv2 b) -- 256 
     ,Tally (n) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM lv3) 
    SELECT CAST(n AS VARCHAR(MAX)) + ' - ' + CONVERT(VARCHAR(MAX),cast('1/1/11 7AM' as datetime), n) xZample 
    , 'CONVERT(VARCHAR(MAX),@YouMindIfWeDanceWitYourDates, '+CAST(n AS VARCHAR(25))+')' AS _________________________tehcode____________________________ 
    FROM Tally 
    WHERE (n< 200) AND (n%100 IN (0,20,21,120,121,126,127,130,131) OR n%100 <= 14) 
    ORDER BY n; 
相關問題