Sql server 如果一条记录具有无效值,则删除具有相同ID的记录

Sql 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 -

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

非常感谢,我分两步完成了,但解决了我的问题!