Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 如何按字母顺序,然后按数字顺序?_Sql_Sql Server - Fatal编程技术网

Sql 如何按字母顺序,然后按数字顺序?

Sql 如何按字母顺序,然后按数字顺序?,sql,sql-server,Sql,Sql Server,在SQL Server中,在按数值排序之前,如何按字母字符对查询结果排序 我有一个我想查询的带有列的表 我发现,这意味着要尝试以下方式: SELECT * FROM dbo.myTable WHERE aColumn LIKE '%val' ORDER BY IF(aColumn RLIKE '^[a-z]', 1, 2), aColumn Aval Bval Cval 1val 2val 然而,这是针对MySQL的,这可能是为什么在SQL Server中不起作用的原因。对于使用正则表达式过

在SQL Server中,在按数值排序之前,如何按字母字符对查询结果排序

我有一个我想查询的带有列的表

我发现,这意味着要尝试以下方式:

SELECT * FROM dbo.myTable
WHERE aColumn LIKE '%val'
ORDER BY IF(aColumn RLIKE '^[a-z]', 1, 2), aColumn
Aval
Bval
Cval
1val
2val
然而,这是针对MySQL的,这可能是为什么在SQL Server中不起作用的原因。对于使用正则表达式过滤器的SQL Server,是否有类似的内容?我收到的错误消息如下:

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'IF'
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'RLIKE'
我想看到的是:

SELECT * FROM dbo.myTable
WHERE aColumn LIKE '%val'
ORDER BY IF(aColumn RLIKE '^[a-z]', 1, 2), aColumn
Aval
Bval
Cval
1val
2val
而不是

1val
2val
Aval
Bval
Cval

您可以使用
LIKE
谓词:

SELECT m.* 
FROM dbo.myTable m
WHERE aColumn LIKE '%val'
ORDER BY (CASE WHEN aColumn like '[a-z]%' THEN 0 ELSE 1 END), aColumn;

我猜会有一些边缘的情况下,数字可能会显示或其他方式,你想排序。以下是一个灵活的解决方案:

DECLARE @TOTALS TABLE
(
  ID INT IDENTITY,
  THEDATA VARCHAR(255)
)

INSERT INTO @TOTALS (THEDATA)
SELECT THEDATA FROM atest 
WHERE THEDATA NOT LIKE '%[0-9]%'
ORDER BY THEDATA ASC

INSERT INTO @TOTALS (THEDATA)
SELECT THEDATA FROM atest 
WHERE THEDATA LIKE '%[0-9]%'
ORDER BY THEDATA ASC

SELECT * FROM @TOTALS
ORDER BY ID ASC
您可以做的是创建一个
表变量
,并使用各种
SELECT
语句填充该表。因为它有一个
IDENTITY
列,所以它可以跟踪插入的订单项。然后按顺序选择退出

在本例中,我只是简单地将所有没有数字的值放入(排序),然后将所有有数字的值放入(排序)


我希望这有帮助:)

答案很好,但是如果我删除了m,它也会起作用。在*前面的第一行,在dbo.myTable后面的第二行,m是怎么回事?@G.LC。此查询没有问题。但是,是的,创建alise of table以了解它的来源是一个很好的实践。谢谢,直到现在才看到这一点