Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 Server进行自然排序_Sql_Sql Server 2008_Natural Sort - Fatal编程技术网

使用SQL Server进行自然排序

使用SQL Server进行自然排序,sql,sql-server-2008,natural-sort,Sql,Sql Server 2008,Natural Sort,我想将列名为PTNT\u VST\u CSNO的值的顺序转换为以下值: VMIP1 VMIP10 VMIP11 VMIP2 VMIP20 VMIP21 VMIP3 VMIP31 VMIP32 VMIP5 VMIP6 VMIP7 VMIP8 VMIP9 VMOP10 VMOP11 VMOP12 VMOP3 VMOP30 VMOP31 VMOP32 VMOP4 VMOP40 VMOP41 VMOP42 VMOP43 VMOP7 VMOP70 VMOP71 VMOP8 VMOP9 致: 我想先对“v

我想将列名为
PTNT\u VST\u CSNO
的值的顺序转换为以下值:

VMIP1
VMIP10
VMIP11
VMIP2
VMIP20
VMIP21
VMIP3
VMIP31
VMIP32
VMIP5
VMIP6
VMIP7
VMIP8
VMIP9
VMOP10
VMOP11
VMOP12
VMOP3
VMOP30
VMOP31
VMOP32
VMOP4
VMOP40
VMOP41
VMOP42
VMOP43
VMOP7
VMOP70
VMOP71
VMOP8
VMOP9
致:


我想先对“vmip”的数字部分进行排序,然后对“vmop”的数字部分进行排序。。我试了很多次,但每次都失败了。请帮我解决排序问题。。。提前谢谢你

这不是世界上最快的事情,但它应该能完成任务:

ORDER BY CASE WHEN PTNT_VST_CSNO LIKE 'vmi%' THEN 0 ELSE 1 END
        ,CAST(replace(replace(PTNT_VST_CSNO, 'vmip', ''), 'vmop', '') as int)

实现这一点最简单的方法是将数字改为3位数

i、 e.1会变成001,2会变成002,10会变成010,依此类推

这将允许您正确地排序数据

您可能希望执行以下操作:

SELECT
  PTNT_VST_CSNO,
  'VMIP' + CASE LEN(REPLACE(PTNT_VST_CSNO, 'VMIP', ''))
    WHEN 1 THEN '00' + REPLACE(PTNT_VST_CSNO, 'VMIP', '')
    WHEN 2 THEN '0' + REPLACE(PTNT_VST_CSNO, 'VMIP', '')
    ELSE REPLACE(PTNT_VST_CSNO, 'VMIP', '')
  END
FROM
  TableName
WHERE
  LEFT(PTNT_VST_CSNO, 4) = 'VMIP'
ORDER BY
  2

经过巨大的考验,我成功地用以下方法解决了这个问题

SELECT ptnt_vst_csno 
FROM   table_name 
ORDER  BY Substring(ptnt_vst_csno, 1, Charindex('P', ptnt_vst_csno)), 
          CONVERT(INT, Substring(Substring(ptnt_vst_csno, 
                                 Charindex('P', ptnt_vst_csno), 
                                 Len( 
                                              ptnt_vst_csno)), 2, Len( 
                       ptnt_vst_csno))) 

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!非常感谢您以正确的格式编辑样本…从今以后,我将在发布之前检查所有这些。。。请帮我解决这个问题…谢谢
SELECT ptnt_vst_csno 
FROM   table_name 
ORDER  BY Substring(ptnt_vst_csno, 1, Charindex('P', ptnt_vst_csno)), 
          CONVERT(INT, Substring(Substring(ptnt_vst_csno, 
                                 Charindex('P', ptnt_vst_csno), 
                                 Len( 
                                              ptnt_vst_csno)), 2, Len( 
                       ptnt_vst_csno)))