【问题标题】:Access SQL, select all but last X char of a field访问 SQL,选择字段的最后一个 X 字符以外的所有字符
【发布时间】:2009-06-15 15:16:51
【问题描述】:

我正在寻找类似于 SUBSTRING 但长度不一样的 MS 访问 SQL 函数 的数据各不相同。

我在一个名为 field1 的字段中有几个值

值长度从 2 到 5 不等。

在所有情况下,我都希望选择除最后一个字符之外的值。 比如:

电脑 浏览器 老鼠 游戏 压缩

变成:

计算 浏览 鼠标 游戏 子

有这样的功能吗?

谢谢。

【问题讨论】:

  • 很好奇,你为什么需要这样做?您的示例没有显示它,但是最后是否有一个您想要摆脱的特定字符?

标签: sql ms-access


【解决方案1】:

我只想:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 来自 ISO/ANSI SQL-92 标准:“SUBSTRING...根据给定的数字起始位置和给定的数字长度返回从给定字符串中提取的字符串”——所以 ACE/Jet 的Mid() 表达式最接近。
    • Paradox 早于 SQL 92。我从 1988 年开始使用它。它根本没有使用 SQL。但我确实说过我对 SubStr() 应该如何工作的想法是特殊的,不是吗?
    【解决方案3】:

    对于 ACE/Jet,我会使用 MID() 表达式。虽然LEFT() 表达式可以正常工作,但MID() 更适合IMO,因为它使代码更具可移植性,即将ACE/Jet 专有的MID() 表达式转换为标准SQL SUBSTRING 会更简单。

    请注意,您需要测试文本的长度以避免出现严重错误,例如当测试当前接受的答案(由 King Avitus 使用 LEFT() 表达式)通过 OLE DB 在零长度字符串上“原样”时,我收到错误,“数据提供程序或其他服务返回 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;
    

    【讨论】:

      猜你喜欢
      • 2015-10-17
      • 2010-10-01
      • 2013-11-20
      • 1970-01-01
      • 2011-09-12
      • 2018-10-01
      • 2021-07-02
      • 2016-12-22
      相关资源
      最近更新 更多