Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 根据字符串中的字符sql从查询中删除行项目_Sql Server_Select_Casting - Fatal编程技术网

Sql server 根据字符串中的字符sql从查询中删除行项目

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)

我有一个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) 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)