Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在列上获取时间,忽略文本_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 在列上获取时间,忽略文本

Sql 在列上获取时间,忽略文本,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,在数据库中,我有列我的问题是—— SELECT Emp_Name, Schedule FROM emp_schedule 它重新生成此结果集: 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:

在数据库中,我有列我的问题是——

SELECT Emp_Name, Schedule 
FROM emp_schedule
它重新生成此结果集:

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
是否可以在不修剪、添加列或编辑我的表格等情况下完成此操作

试试这个

我使用了
REVERSE
PATINDEX
子字符串来实现它。忽略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 |
+-------------+-------------------------------------+-------------------------------+--------------------+
我做了如下尝试:

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

重新设计你的桌子。开始时间和结束时间各有一列。您好,贾尔赫先生,谢谢您的即时回复。我无法修改我的表,因为我对修改表有权限限制。嗯。。你真的想在不使用字符串函数的情况下解析字符串吗?为什么不
TRIM
?解析字符串不是Sql的强项。这是表示层可以更好地处理的事情。非常好,它提供了精确的结果。这正是我所需要的!非常感谢,先生!你真是一件幸事!:)