访问SQL,选择除最后一个字段的所有字符之外的所有字符

问题描述:

我正在寻找一个MS访问类似于SUBSTRING的SQL函数,但并不像数据长度 不同。访问SQL,选择除最后一个字段的所有字符之外的所有字符

我有一个领域的一些值,我们会打电话给field1的

值长度从2变化到5

在任何情况下,我要选择除了最后一个字符的值。 因此,例如:

 
computer 
browser 
mouse 
game 
zip 

变为:

 
compute 
browse 
mous 
gam 
zi 

有这样的功能?

谢谢。

+0

好奇,为什么你需要做到这一点吗?你的例子没有显示它,但是在最后有没有一个特定的字符表明你想摆脱? – JeffO 2009-06-15 17:26:14

我只想:

select left(field1, len(field1) -1) from [table] 
+0

谢谢国王,这个作品完美。 – 2009-06-15 18:33:14

对于实际的模串,看看MID()函数。我对SubStr()应该做什么有特殊的想法(从我的Paradox时代开始),所以我很久以前编写了自己的SubStr()函数(它将输入字符串根据分隔符分成两个变量)。

+0

从ISO/ANSI SQL-92标准:“SUBSTRING ...根据给定的数字起始位置和给定的数字长度返回从给定字符串中提取的字符串” - 因此ACE/Jet的Mid()表达式最接近。 – onedaywhen 2009-06-16 07:18:32

对于ACE/Jet,我会使用MID()表达式。尽管LEFT()表达式可以正常工作,但是MID()是IMO的优选,因为它使代码更加便携,即将ACE/Jet专有MID()表达式转换为标准SQL SUBSTRING会更简单。

请注意,您需要测试文本的长度以避免出现令人讨厌的错误,例如当通过OLE DB在零长度字符串上测试当前接受的答案(由King Avitus使用LEFT()表达式)'按原样'时,我收到错误,“数据提供者或其他服务返回了E_FAIL状态”,这不是很有用:(

我建议使用ACE/Jet的IIF()表达(同样,易转化为标准SQL的CASE表达式)来测试长度零长度字符串:

SELECT column_1, 
     MID(column_1, 1, IIF(LEN(column_1) = 0, 0, LEN(column_1) - 1)) 
      AS column_1_truncated 
    FROM (
     SELECT DISTINCT 'ab' AS column_1 FROM Calendar 
     UNION ALL 
     SELECT DISTINCT 'a' FROM Calendar 
     UNION ALL 
     SELECT DISTINCT '' FROM Calendar 
     UNION ALL 
     SELECT DISTINCT NULL FROM Calendar 
     ) AS MyTable;