【问题标题】:Identify if userId contains digits at end of string in sql识别userId是否在sql中的字符串末尾包含数字
【发布时间】:2021-02-09 05:58:18
【问题描述】:

我想实现这个。

  1. 上周非转换用户的唯一用户总数(用户 ID 模式末尾不包含 3 位数字)
  2. 上周转换用户的唯一用户总数(用户 ID 模式末尾包含 3 位数字)
        CREATE TABLE [dbo].[Table1]
         (
            [ID] [bigint] NOT NULL,
            [Date] [datetime] NOT NULL,
            [userID] [nvarchar](64) NULL,
            CONSTRAINT [PK_Table1] PRIMARY KEY NONCLUSTERED 
        (
            [ID] ASC
        )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
        ) ON [PRIMARY]
    
    select 'Total Number of Transition Users' Name, convert(varchar(20), count(DISTINCT  userID)) 'Number'
    from.[dbo].Table1 where userID = (SELECT RIGHT(userID, 3))
    AND Date>= DATEADD(day,-7, GETDATE())
    UNION
    select 'Total Number of Non- Transition Users' Name, convert(varchar(20), count( DISTINCT userid)) 'Number'
    from [dbo].Table1 where userID <> (SELECT RIGHT(userID, 3))
    AND Date>= DATEADD(day,-7, GETDATE())

    

【问题讨论】:

    标签: sql sql-server string datetime count


    【解决方案1】:

    如果我没看错的话,你可以使用likecase表达式给每个用户分配一个类型,然后聚合:

    select x.usertype, count(distinct userid) cnt
    from [dbo].table1 t
    cross apply (values (
        case when t.userid like '%[0-9][0-9[0-9]' then 'transition' else 'non transition' end,
        t.userid
    )) x(usertype, userid)
    where t.date >= dateadd(day,-7, getdate())
    group by x.usertype
    

    【讨论】:

    • 你能解释一下你的答案吗?您的解决方案如何检查字符串中的最后 3 位数字。谢谢
    • @KeentoLearn: 条件 t.userid like '%[0-9][0-9[0-9]' 检查 userid 是否以 3 位数字结尾。
    • 感谢您的及时回复。使用cross apply 有什么好处。
    • @KeentoLearn:我们需要在selectgroup by 子句中输入用户类型。使用cross apply 避免重复表达式;它只计算一次,然后我们可以在两个子句中使用它。
    • 嗨,一个小小的帮助。如果case when t.userid like '%[0-9][0-9[0-9]' then 'Total Number of Transition' else 'Total Number of non Transition' end, 转换序列应该先出现,然后是非转换,如何排序序列。目前,非过渡先来后过渡。
    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2013-03-15
    相关资源
    最近更新 更多