2016-11-01 99 views
0

我有下面的代碼,它工作在SQL Management Studio中,但不與vb.net:vb.net報告表矩陣aplhanumeric排序

Dim opdragsorteeraplhanumeries As New SqlCommand 
    konneksie.ConnectionString = "Data Source=GIDEON-E-LAPTOP\SQLEXPRESS2014;Initial Catalog=SkeduleringDatabasis;Integrated Security=True" 
    konneksie.Open() 
    opdragsorteeraplhanumeries.Connection = konneksie 
    opdragsorteeraplhanumeries.CommandText = "SELECT * FROM Oesskattings " & _ 
    "ORDER BY " & _ 
     "CASE WHEN ISNUMERIC(blokno) = 1 THEN right(Replicate('0',21) + blokno, 21) " & _ 
      "WHEN ISNUMERIC(blokno) = 0 then Left(blokno + Replicate('',21), 21) " & _ 
      " ELSE blokno " & _ 
     " End" 

    opdragsorteeraplhanumeries.ExecuteNonQuery() 
    konneksie.Close() 
    MsgBox("Alphanumeries gesorteer") 
+0

這是無關的表矩陣 - 你需要在表中的數據進行排序,無論是在查詢或數據集;爲此你沒有提供足夠的信息。例如,你的意思是它必須被排序,以便前n個數字字符按數字順序排序,然後是文本?比如,'34 -BNW會去哪裏? '34_bnw'? – peterG

回答

0
Imports System.Text.RegularExpressions 

Sub Main() 
    Dim input = "5-BOP,2,11,4_ANW" 
    Dim result = sortString(input) 
End Sub 

Private Function sortString(input As String) As String 
    Dim result = input.Split(","). 
     OrderBy(Function(s) Integer.Parse(Regex.Replace(s, "[^0-9.]", ""))). 
     Aggregate(Function(p1, p2) p1 & "," & p2) 
    Return result 
End Function 
0

你需要給一些額外的信息。是否所有條目都包含一個唯一的數字,後跟非數字數據,並且您想按數字排序?或者是其他可能的組合。喜歡,可以有「3-5」和「3-43」嗎?在那種情況下,3-5將在3-43之前?或者可以有「3-Y-5」和「3-X-17」?如果是的話,哪個應該先來? 「3-X-5」和「3-5-X」怎麼樣?等

此外,當你給你的示例值的列表,是應該代表從一個記錄或多個數據?也就是說,你是否有一個字段包含「5-BOP,2,11,4_ANW」的記錄?或者你的意思是說一個記錄有「5-BOP」,另一個記錄有「2」等?

在任何情況下,SQL和我所知的任何內置函數都不會執行您所描述的排序方式 - 有效地將字段拆分爲小塊並僅對其中的一個進行排序,或者對如何對其進行排序涉及不同的部分。

如果這是一種特定於一個報告,你可以在內存中的記錄進行排序。如果它是整個系統中常用的排序,那麼您可能希望能夠在數據庫上執行此操作。這樣做的常用方法是創建一個字段,將數據僞裝成傳統SQL排序工作的地方。就像如果現實情況是,有一個數字,然後說無所謂數後,一些額外的東西,然後創建一個只持有數量和被聲明爲整數的字段。如果你需要對數字進行排序,並且按照字母順序排序,那麼就需要一個數字字段和一個剩餘字段的字段。如果它比這更復雜,則可能需要創建一個填充了最大尺寸的字段並將其連接起來。就像如果你總是有一個數字,是一個最大的3個位數,後跟最多4個字符,你可以把這些值代入「005BOP」,「002」,「011」和「004ANW」。

我曾經建造在哪裏做出讀凌亂號和格式化它有點像我上面描述,然後我創建此字段的索引的SQL用戶定義的函數的系統。這節省了兩次在記錄中的相同數據。

一般來說,如果您有一個由多個部分組成的字段,通常最好在數據庫中有單獨的字段,並在需要時將它們放在一起,而不是嘗試採用一個字段分開。把東西放在一起比把它們拆開更容易。