我有一列包含一个名为TableName的字母数字值,只要是字母数字,几乎可以是任何短语。
样本数据可以是(不一定是3个字母后跟一个数字)
AAA 1
AAB 2
AAC 3
AAB 10
AAC 12
AAB 12
如果我使用像ORDER BY TableName这样的普通排序
这将成为
AAA 1
AAB 10
AAB 12
AAB 2
AAC 12
AAC 3
我想要完成的是
AAA 1
AAB 2
AAB 10
AAB 12
AAC 3
AAC 12
我希望您知道此字段可以是任何东西,即
ABC123MAS3482
KASJ19LKA
213LKS23
只是为了让您知道该字段中没有格式。唯一的规则是它是字母数字。
我希望你们能对我的SQL知识有所帮助。
我正在使用SQL Server 2008 R2
我很确定这不可能太容易做到。
您的语句I'd like you to know that this field COULD be ANYTHING i.e.
几乎可以杀死它,否则您可以将字母和数字值拆分为两列,或者通过某种字符串函数将它们拆分。
但是这样我唯一能看到的出路是:
编写自己的函数,该函数返回一个可以排序的数字值。然后,您可以像这样使用它:
SELECT AlphaNumericValue FROM ValuesTable ORDER BY dbo.GETSORTVALUE(AlphaNumericValue)
这可能是此功能的虚拟主体:
CREATE FUNCTION dbo.GETSORTVALUE(@value NVARCHAR)
RETURNS INT
BEGIN
DECLARE @dummyValue INT = LEN(@value)
-- do something with your string here to get a sorting number
RETURN @dummyValue
END
由于列中的值可能是anything
您需要首先进行良好的排序,因此应将其包括在该函数中。例如,在这种情况下,您尚未定义如何排序:
你说AAB 2
要来之前AAB 10
,但对于AA2B
和AA10B
?
定义好此功能后,您的自定义逻辑应进入该功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句