Sql server 根据字符串中的字符sql从查询中删除行项目
我有一个sql查询,需要根据查询中生成的varchar中倒数第三个数字删除特定行。查询采用格式为“yyyy-MM-dd hh:MM:ss”的小日期时间,并将其转换为varchar。例如:日期“2015-05-04 06:03:00”将成为varchar 05040603。我需要删除第三个到最后一个varchar数字为9、1、4或0的任何行项目。这是我目前的代码:Sql server 根据字符串中的字符sql从查询中删除行项目,sql-server,select,casting,Sql Server,Select,Casting,我有一个sql查询,需要根据查询中生成的varchar中倒数第三个数字删除特定行。查询采用格式为“yyyy-MM-dd hh:MM:ss”的小日期时间,并将其转换为varchar。例如:日期“2015-05-04 06:03:00”将成为varchar 05040603。我需要删除第三个到最后一个varchar数字为9、1、4或0的任何行项目。这是我目前的代码: SELECT DISTINCT RIGHT('0' + CAST(DATEPART(M, TableA.DateTime)
SELECT DISTINCT
RIGHT('0' + CAST(DATEPART(M, TableA.DateTime) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, TableA.DateTime) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, TableA.DateTime) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, TableA.DateTime) AS varchar), 2) AS 'VarChar Number',
ColA, DateTime
FROM
TableA
WHERE
ColB IS NOT NULL
AND DateTime NOT IN (SELECT DateTime From TableB)
AND DateTime NOT IN (SELECT DateTime From tableC
WHERE DateTime IS NOT NULL)
在本例中,表A有我的小日期时间,并且从中生成
varchar
编号。可乐来自表A,只是信息。Where语句只是将日期时间与其他表进行交叉比较,以根据这些表中是否已出现日期来删除它。您可以使用子字符串来执行此操作
select * from
(
SELECT DISTINCT
RIGHT('0' + CAST(DATEPART(M, TableA.DateTime) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, TableA.DateTime) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, TableA.DateTime) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, TableA.DateTime) AS varchar), 2) AS [VarChar Number],
ColA, DateTime FROM TableA WHERE ColB IS NOT NULL
AND DateTime NOT IN (SELECT DateTime From TableB)
AND DateTime NOT IN (SELECT DateTime From tableC WHERE DateTime IS NOT NULL)
) t
where substring([VarChar Number], 6, 1) not in ('0','1','4','9')
您可以使用substring
来执行此操作
select * from
(
SELECT DISTINCT
RIGHT('0' + CAST(DATEPART(M, TableA.DateTime) AS varchar), 2)
+ RIGHT ('0' + Cast(DATEPART(DD, TableA.DateTime) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(HH, TableA.DateTime) AS varchar), 2)
+ RIGHT('0' + CAST(DATEPART(MINUTE, TableA.DateTime) AS varchar), 2) AS [VarChar Number],
ColA, DateTime FROM TableA WHERE ColB IS NOT NULL
AND DateTime NOT IN (SELECT DateTime From TableB)
AND DateTime NOT IN (SELECT DateTime From tableC WHERE DateTime IS NOT NULL)
) t
where substring([VarChar Number], 6, 1) not in ('0','1','4','9')
我不认为有任何理由乱搞字符串值,只需提取分钟并处理它。更清楚地理解意图,避免出现vkp回答的问题,避免意外地看到第6位而不是第8位
我不认为有任何理由乱搞字符串值,只需提取分钟并处理它。更清楚地理解意图,避免出现vkp回答的问题,避免意外地看到第6位而不是第8位。您使用的是哪种类型的SQL?Microsoft、Oracle、PostgreSQL、MySQL?Microsoft,特别是SQL Server Management Studio。但是,我将把代码放到vb.net程序中,并用它填充datagridview。您使用的是哪种类型的SQL?Microsoft、Oracle、PostgreSQL、MySQL?Microsoft,特别是SQL Server Management Studio。但是,我将把代码放到vb.net程序中,并用它填充datagridview。这可能会起作用,但是我宁愿选择原始的datetime列,而不是生成的datetime列。谢谢@我想你需要的是第八个字符,而不是第六个。我也必须仔细阅读,但是varchar
版本不包括秒。这可能会起作用,但是我宁愿选择原始的日期时间列,而不是生成的日期时间列。谢谢@我想你需要的是第八个字符,而不是第六个。我也必须仔细阅读,但是varchar
版本不包括秒。
...
WHERE
ColB IS NOT NULL
AND DateTime NOT IN (SELECT DateTime From TableB)
AND DateTime NOT IN (SELECT DateTime From tableC
WHERE DateTime IS NOT NULL)
and datepart(minute, TableA.DateTime) % 10 not in (0, 1, 4, 9)