我有一张员工进出日期和时间的日志表如下所示;
项目的数量是不同的,所有条目都是以每日为基础的。由于入口处和出口记录的原因,最低入口额为2。
我只想从日志中获取开始日期和结束日期。关于T查询请帮我.
发布于 2017-08-20 00:14:04
如果使用Sqlserver 2005或更高版本,多次使用反向函数不利于性能,下面的代码更有效。
假设列名ise logdata和表名为logTable
SELECT
SUBSTRING(logdata, 0, CHARINDEX(',', logdata)) AS FirstItem,
SUBSTRING(logdata, (LEN(logdata) - CHARINDEX(',',REVERSE(logdata))+2), LEN(logdata)) AS LastItem
FROM logTable
您可以在此链接http://rextester.com/TRGHL10059中检查确切的解决方案。
发布于 2017-08-20 01:44:14
问题的另一个简单解决方案是使用左和右函数。
DECLARE @str NVARCHAR(MAX)='11/12/2007 12:23,11/12/2007 21:22,11/12/2007 22:24'
选择左侧(@str,CHARINDEX(',',@str) -1),右(@str,CHARINDEX(',',反向(@str)) -1)
发布于 2017-08-20 00:22:49
实际上,由于所有的日期时间戳都是固定数量的字符,您可以使用像左-右函数这样简单的东西.(没有必要把事情复杂化).
IF OBJECT_ID('tempdb..#MovementLog', 'U') IS NOT NULL
DROP TABLE #MovementLog;
CREATE TABLE #MovementLog (
LogDate DATE NOT NULL,
ClockTimeString VARCHAR(1000) NOT NULL
);
INSERT #MovementLog (LogDate, ClockTimeString) VALUES
('2007-12-11', '11/12/2007 12:23,11/12/2007 21:22,11/12/2007 22:24'),
('2007-12-12', '12/12/2007 09:11,12/12/2007 11:34,12/12/2007 17:15');
--==============================================================================
SELECT
ml.LogDate,
BegDTStamp = LEFT(ml.ClockTimeString, 16),
EndDTStamp = RIGHT(ml.ClockTimeString, 16)
FROM
#MovementLog ml;
结果..。
LogDate BegDTStamp EndDTStamp
---------- ---------------- ----------------
2007-12-11 11/12/2007 12:23 11/12/2007 22:24
2007-12-12 12/12/2007 09:11 12/12/2007 17:15
https://stackoverflow.com/questions/45777274
复制相似问题