选择查询以标识数字或字母数字值

时间:2018-02-19 04:57:41

标签: sql sql-server sql-server-2008 select

我有一张如下表:

  TN  Tier
  90   1
  90   N3
  30   2
  40   3
  50   A

"级"列可以包含任何TN的数字和字母数字值。我想在上面的表上运行一个select查询,这样如果对于任何TN,Tier列中都存在(数字和字母数字)值,那么它应该被称为" Mix"否则"数字"或"非数字"。

期望的输出:

 TN   Result
 90    Mix
 30   Numeric
 40   Numeric
 50   Non-Numeric

我能够通过使用多个临时表来实现它,但我想避免使用临时表。任何帮助将不胜感激!!!

4 个答案:

答案 0 :(得分:1)

对于MySQL,请将REGEXPCASE表达式一起使用:

SELECT
    TN,
    CASE WHEN SUM(CASE WHEN Tier REGEXP '[A-Z]' AND Tier REGEXP '[0-9]'
                       THEN 1 ELSE 0 END) > 0 THEN 'Mix'
         WHEN SUM(CASE WHEN Tier REGEXP '[A-Z]'
                       THEN 1 ELSE 0 END) > 0 THEN 'Non-Numeric'
         WHEN SUM(CASE WHEN Tier REGEXP '[0-9]'
                       THEN 1 ELSE 0 END) > 0 THEN 'Numeric'
         ELSE 'Other' END AS Result
FROM yourTable
GROUP BY
    TN;

对于SQL Server,您可以使用LIKE使用适当的模式稍微改变上述查询:

SELECT
    TN,
    CASE WHEN SUM(CASE WHEN Tier LIKE '%[A-Z]%' AND Tier LIKE '%[0-9]%'
                       THEN 1 ELSE 0 END) > 0 THEN 'Mix'
         WHEN SUM(CASE WHEN Tier LIKE '%[A-Z]%'
                       THEN 1 ELSE 0 END) > 0 THEN 'Non-Numeric'
         WHEN SUM(CASE WHEN Tier LIKE '%[0-9]%'
                       THEN 1 ELSE 0 END) > 0 THEN 'Numeric'
         ELSE 'Other' END AS Result
FROM yourTable
GROUP BY
    TN;

@JohnWoo给出的SQL Server答案比这更紧,但是当你用MySQL标记时,我最初回答了这个数据库。

答案 1 :(得分:1)

您可以利用SQL Server中的ISNUMERIC()功能。

SELECT [TN],
       CASE MAX(ISNUMERIC(Tier)) + MIN(ISNUMERIC(Tier))
            WHEN 2 THEN 'Numeric'
            WHEN 1 THEN 'Mix'
            ELSE 'Non-Numeric'
       End As Result
FROM TableName
GROUP BY TN

这是Demo

答案 2 :(得分:0)

你不需要任何大问题,只需简单,

即可

试试这个:

Select * from table

然后你可以在while循环中检查你的列的值,每次你可以在你的记录中搜索有数字或没有数字的字符串。

$string = $row['Tier'];
if (preg_match('/[A-Za-z]/', $myString) )
{     
   echo 'String contains letters';   
}
else if(preg_match('/[0-9]/', $myString))
{
    echo 'String contains numbers';
}else if($string == '')
{
    echo 'String contains no letter and no number';
}

答案 3 :(得分:0)

我希望你使用的是mysql。如果您可以按如下方式编写自定义函数,那就更好了。

delimiter //
CREATE FUNCTION is_numeric(inputValue VARCHAR(50))
  RETURNS INT
  BEGIN
    IF (inputValue REGEXP ('^[0-9]+$'))
    THEN
      RETURN 1;
    ELSE
      RETURN 0;
    END IF;
  END;

Example - select is_numeric(id),is_numeric(full_name) FROM tbl_user;