2017-03-09 52 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 
相关问题