2017-03-09 51 views
4

,我有列。 - 我的查詢 -在列上獲取時間忽略數據庫中的文本

SELECT Emp_Name, Schedule 
FROM emp_schedule 

它reurns此ResultSet:

Emp_Name  Schedule 

M.S.Cave  10:00 AM - 7:00 PM Semi Flexi 
M.S.Cave  10:00 AM - 7:00 PM Semi Flexi 
K.V.Boreta  9:00 AM - 6:00 PM Fixed 
K.V.Boreta  9:00 AM - 6:00 PM Fixed 
R.M.Mendoza  Branch 8:30 AM to 5:30 PM Sunday RD 
R.M.Mendoza  Branch 8:30 AM to 5:30 PM Sunday RD 

但我想顯示只有一次的 「日程安排」 一欄,不顧文本。

Emp_Name  Schedule 

M.S.Cave  10:00 AM - 7:00 PM 
M.S.Cave  10:00 AM - 7:00 PM 
K.V.Boreta  9:00 AM - 6:00 PM 
K.V.Boreta  9:00 AM - 6:00 PM 
R.M.Mendoza  8:30 AM to 5:30 PM 
R.M.Mendoza  8:30 AM to 5:30 PM 

是否有可能做到這一點沒有TRIM,添加列或編輯我的表等?

+0

重新設計你的表。有開始和結束時間的單獨列。 – jarlh

+0

嗨,先生,謝謝你的直接回應。我無法修改我的表格,因爲我對修改表格有權限限制。 – interkey

+0

嗯..你真的想分析沒有字符串函數的字符串?爲什麼不'TRIM'? – anatol

回答

2

試試這個

我用REVERSEPATINDEXSUBSTRING去實現它。忽略CTE,因爲我只想使用臨時表。

;WITH CTE (Emp_Name, Schedule) 
AS (
    SELECT 'M.S.Cave', '10:00 AM - 7:00 PM Semi Flexi' 
    UNION ALL 
    SELECT 'M.S.Cave', '10:00 AM - 7:00 PM Semi Flexi' 
    UNION ALL 
    SELECT 'K.V.Boreta', '9:00 AM - 6:00 PM Fixed' 
    UNION ALL 
    SELECT 'K.V.Boreta', '9:00 AM - 6:00 PM Fixed' 
    UNION ALL 
    SELECT 'R.M.Mendoza', 'Branch 8:30 AM to 5:30 PM Sunday RD' 
    UNION ALL 
    SELECT 'R.M.Mendoza', 'Branch 8:30 AM to 5:30 PM Sunday RD' 
    ) 
, CTE2 AS (
    SELECT * 
    , SUBSTRING(Schedule, PATINDEX('%[0-9]%', Schedule), LEN(Schedule)) SS 
    FROM CTE 
    ) 
SELECT * 
,REVERSE(SUBSTRING(REVERSE(SS), PATINDEX('%[0-9]%', REVERSE(SS)) - 3, LEN(SS))) 
FROM CTE2 

而結果會是怎樣

+-------------+-------------------------------------+-------------------------------+--------------------+ 
| Emp_Name |    Schedule    |    SS    | (No column name) | 
+-------------+-------------------------------------+-------------------------------+--------------------+ 
| M.S.Cave | 10:00 AM - 7:00 PM Semi Flexi  | 10:00 AM - 7:00 PM Semi Flexi | 10:00 AM - 7:00 PM | 
| M.S.Cave | 10:00 AM - 7:00 PM Semi Flexi  | 10:00 AM - 7:00 PM Semi Flexi | 10:00 AM - 7:00 PM | 
| K.V.Boreta | 9:00 AM - 6:00 PM Fixed    | 9:00 AM - 6:00 PM Fixed  | 9:00 AM - 6:00 PM | 
| K.V.Boreta | 9:00 AM - 6:00 PM Fixed    | 9:00 AM - 6:00 PM Fixed  | 9:00 AM - 6:00 PM | 
| R.M.Mendoza | Branch 8:30 AM to 5:30 PM Sunday RD | 8:30 AM to 5:30 PM Sunday RD | 8:30 AM to 5:30 PM | 
| R.M.Mendoza | Branch 8:30 AM to 5:30 PM Sunday RD | 8:30 AM to 5:30 PM Sunday RD | 8:30 AM to 5:30 PM | 
+-------------+-------------------------------------+-------------------------------+--------------------+ 
+2

真的很棒,它給出了精確的結果真棒 –

+1

這就是我所需要的!先生非常感謝您!你是一個幸福! :) – interkey

+1

不客氣 –

1

我試過如下:

select Emp_name, 
     reverse(SUBSTRING(reverse(Schedule),charindex(' MP ',REVERSE(Schedule)),len(Schedule))) 
     ,substring(Schedule,charindex(' AM ',Schedule)-5,charindex(' PM ',Schedule)-charindex(' AM ',Schedule)+8) 
     from emp_schedule 
相關問題