Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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_Ms Access_Ms Access 2007 - Fatal编程技术网

我的SQL代码上的访问数据类型不匹配

我的SQL代码上的访问数据类型不匹配,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我有一个查询,从我的电话系统导入中提取电话分机和一个人的全名,并将全名拆分为名字和姓氏。这对于将名称拆分非常有用,但是如果我尝试按任意一个名称进行排序,就会出现数据类型不匹配错误 下面是SQL代码 SELECT ExportG3R.Extension, Left([ExportG3R.name],InStr([ExportG3R.name],",")-1) AS LastName, Trim(Mid([ExportG3R.name],InStr([E

我有一个查询,从我的电话系统导入中提取电话分机和一个人的全名,并将全名拆分为名字和姓氏。这对于将名称拆分非常有用,但是如果我尝试按任意一个名称进行排序,就会出现数据类型不匹配错误

下面是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;

关于如何让它工作,你有什么想法吗?

你可以把它包装在一个子查询中

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

我创建了一个ExportG3R表,其中包含用于扩展名和名称的文本字段。您的查询使用了名称值,如Litzner、Mike。但是,一个不包含逗号的名称值,例如Litzner Mike,为LastName和FirstName分别提供了错误信息。若name为Null,则这两种情况都会出现错误。在我尝试按LastName和/或FirstName排序之前,这两个选项都不是SELECT的交易破坏者。尝试这些排序时,Access 2003 db引擎响应无效的过程调用,这与您收到的错误消息不同

因此,尽管我不确定我的情况是否与您的情况完全匹配,但我建议您尝试使用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在设计视图中创建该表时,给了我一个关于该字段名的警告。尝试在“设计”视图中创建一个一次性表格,并阅读它提供的有关名称警告的帮助。如果可能的话,将其更改为非保留字的内容。。。也许是全名

最后,我认为如果将name字段拆分为表本身中的两个字段,这将更简单。将名称存储为Last,First将两个属性组合在一个字段中。所以当你需要它们中的任何一个时,你必须把它们分开。单独存储它们会更容易,然后在需要时将它们作为最后一个、第一个进行连接:

SELECT LastName & ", " & FirstName AS FullName

您是按LastName、FirstName还是按左侧[ExportG3R.name]、InStr[ExportG3R.name]、-1、TrimMid[ExportG3R.name]、InStr[ExportG3R.name]、+1、Len[ExportG3R.name]、-InStr[ExportG3R.name]、,,?不能在ORDER BY中使用别名,因此必须重复计算。如果您使用Access QBE来构造查询,它将为您解决这个问题。如果你做得对,可能是你在那里的某个地方有空值,这在SELECT中不是问题,但会导致ORDER BY中出现问题。我从中导出数据的程序只导出全名,作为名称。这就是我首先要做的。那么,我如何才能让它工作,无论是全名、逗号还是空白?我不认为返回带有电话分机但没有名字的行是有用的,所以将这些行忽略掉。如果您想包含这些行,可以将IIf函数与FirstName和LastName表达式一起使用。这将非常有用,因为它会告诉我哪些号码在电话系统中配置不当。