Sql server 如果一条记录具有无效值,则删除具有相同ID的记录
我有一个SQL中有307807行的表。如果“开始日期”和“结束日期”列的值无效,我想删除记录。不幸的是,我的userID被重复了不止一次。因此,我想删除受无效值影响的用户IDSql server 如果一条记录具有无效值,则删除具有相同ID的记录,sql-server,Sql Server,我有一个SQL中有307807行的表。如果“开始日期”和“结束日期”列的值无效,我想删除记录。不幸的是,我的userID被重复了不止一次。因此,我想删除受无效值影响的用户ID UserID ---- start_date ---- end_date 123 ---- 06-05-1934 ---- 16-05-1934 123 ---- 06-05-1933 ---- 16-05-1933 123 ---- /N ---- 16-03-1920 234 -
UserID ---- start_date ---- end_date
123 ---- 06-05-1934 ---- 16-05-1934
123 ---- 06-05-1933 ---- 16-05-1933
123 ---- /N ---- 16-03-1920
234 ---- 04-03-1945 ---- 17-04-1945
234 ---- 05-06-1999 ---- 06-07-1999
在这里,我想删除用户ID为123的所有记录,因为我不能再使用这些数据了
我使用MS SQL Server Management Studio 17。您需要选择日期不正确的所有用户,然后删除这些用户的记录:
WITH BadUsers as (
SELECT DISTINCT UserID from TableA
where start_date = '/n' or end_date ='n'
)
DELETE FROM TableA
JOIN BadUsers ON
Table.UserID = BadUser.UserID
使用
TRY\u CONVERT
检查datetime
是否有效
;WITH cte
AS (SELECT indictr = Min(CASE WHEN Try_convert(datetime, start_date, 105) IS NULL OR Try_convert(datetime, end_date, 105) IS NULL THEN 0 ELSE 1 END)
OVER(partition BY UserID ),*
FROM Yourtable)
DELETE FROM cte
WHERE indictr = 0
您可以将用作:
CREATE TABLE T (
ID INT,
SDate VARCHAR(10),
EDate VARCHAR(10)
);
INSERT INTO T VALUES
(123, '1934-05-06', '1634-05-16'),
(123, '/N', '1934-05-25'),
(123, '1934-05-26', 'WrongDate');
SELECT *
FROM T;
DELETE FROM T
WHERE ID IN
(
SELECT DISTINCT ID
WHERE (TRY_CAST(SDate AS DATE) IS NULL) OR (TRY_CAST(EDate AS DATE) IS NULL)
);
SELECT *
FROM T;
非常感谢,我分两步完成了,但解决了我的问题!