2011-08-19 65 views
0

我有一個查詢,從我的電話系統導入拉電話擴展名和一個人的全名,並將全名分爲姓和名。它很適合分割名稱,但如果我嘗試按任一名稱排序,則會出現數據錯誤不匹配錯誤。訪問數據類型不匹配我的SQL代碼

這是SQL代碼。

SELECT ExportG3R.Extension, 
      Left([ExportG3R.name],InStr([ExportG3R.name],",")-1) AS LastName, 
      Trim(Mid([ExportG3R.name],InStr([ExportG3R.name],",")+1,Len([ExportG3R.name])-InStr([ExportG3R.name],","))) AS FirstName 
FROM ExportG3R 
ORDER BY ExportG3R.Extension; 

有關如何使其工作的任何想法?

+0

你的'名字,FirstName'或排序'左([ExportG3R.name],InStr函數([ ([ExportG3R.name],InStr([ExportG3R.name],「,」)+ 1,Len([ExportG3R.name]) - InStr([ ExportG3R.name], 「」)))'?您不能在ORDER BY中使用別名,因此您必須重複計算。如果您使用Access QBE構建您的查詢,它將爲您處理此問題。如果你做得很對,那可能是你在那裏有Null,在SELECT中沒有問題,但在ORDER BY中引起問題。 –

回答

1

你可以將它包裝在一個子查詢中;

SELECT extension,lastname,firstname 
FROM (
    SELECT ExportG3R.Extension, 
    Left([ExportG3R.name],InStr([ExportG3R.name],",")-1) AS LastName,      
    Trim(Mid([ExportG3R.name],InStr([ExportG3R.name],",")+1, 
     Len([ExportG3R.name])-InStr([ExportG3R.name],","))) AS FirstName 
    FROM ExportG3R 
) order by firstname 
2

我創建了文本字段ExportG3R表擴展。您的查詢使用名稱值「Litzner,Mike」。但是,名稱不包含逗號的值(如「Litzner Mike」)給了我姓氏的#Error和姓氏的「Litzner Mike」。如果名稱爲空,它給了我#Error的兩個。直到我嘗試對LastName和/或FirstName進行排序時,這兩者都沒有成爲SELECT的交易斷路器。嘗試這些排序時,Access 2003數據庫引擎響應「無效的過程調用」,這與您得到的錯誤消息不同。因此,儘管我不確定我的情況是否與您的情況完全匹配,但我建議您嘗試使用WHERE子句進行查詢,以僅返回非空值名稱值的行,並且還包含逗號。

SELECT 
    e.Extension, 
    Left(e.[name],InStr(e.[name],",")-1) AS LastName, 
    Trim(Mid(e.[name],InStr(e.[name],",")+1,Len(e.[name])-InStr(e.[name],","))) AS FirstName 
FROM ExportG3R AS e 
WHERE e.name Like "*,*" 
ORDER BY ORDER BY 2,3; 

另一個值得關注的是,是一個保留字。使用Access 2007在設計視圖中創建該表時,給了我一個有關該字段名稱的警告。嘗試在設計視圖中創建一個可丟棄表格,並在它給出有關名稱的警告時閱讀它提供的幫助。如果可能的話,將它改爲不是保留字的東西...... FullName或許。

最後,我認爲如果名稱字段被拆分爲表格中的兩個字段,這會更簡單。將姓名存儲爲「Last,First」將兩個屬性組合在一個字段中。所以當你需要任何一個時,你必須把它們分開。它很容易分開存放,然後將它們連接起來時,你需要他們爲「姓,名」:

SELECT LastName & ", " & FirstName AS FullName 
+0

我從中導出數據的程序僅導出FullName作爲名稱。所以這就是我要開始工作的一切。 –

+0

那麼我怎樣才能讓它工作或不是FullName,有逗號,還是空白? –

+0

我不認爲用電話擴展名返回行但沒有名字會很有用,所以留下這些行。如果要包含這些行,可以使用帶FirstName和LastName表達式的IIf()函數。 – HansUp

相關問題