【问题标题】:Select a value using iif access query使用 iif 访问查询选择一个值
【发布时间】:2021-06-09 19:52:03
【问题描述】:

我有一行包含这个值:

account :
adm.ahrgrst001
adm.ns2dhdujhd
adm.ff2hdjhh
adm.haidhidh103
adm.hshiksh122
adm.cn3ehuioe

我想提取两个不同的值: 当它像adm.hshiksh122 一样结束时,我想提取hshiksh 并以adm.cn3ehuioe 开头,我想要ehuioe 开头都没有adm.

我是这么想的

IIF(isnumeric(RIGHT (account,3)),LEFT(account,LEN(account)-4),RIGHT (account,LEN(account)-7))

像adm.cn3ehuioe 这样的值我错了像adm.cn3ehui adm.ahrgrst001 是正确的 ahrgrst

感谢所有愿意阅读的人

【问题讨论】:

  • MS Access 还是 SQL Server?请仅标记单个 RDBMS,并且仅标记单个版本(2007 或 2010),除非您有特定的多版本要求。
  • 很抱歉这是 MS 访问权限
  • 那么请更正您的标签。
  • 您想要以 001 结尾的值还是以 3 位数字结尾的值?你想用它们做什么?发布示例数据和预期结果以阐明您想要什么。
  • 我想从 adm.ff1jdsfkdhf' 和 ahrgrst 'adm.ahrgrst001' 获得 ff1jdsfkdhf。抱歉解释不好

标签: ms-access ms-access-2010 ms-access-2007


【解决方案1】:

获取这两种值的正确方法是:

account LIKE 'adm.[!0-9][!0-9]#[!0-9]*'

对于在点后有 2 个字母、1 个数字和字母的值,并且:

account LIKE 'adm.*###'

对于以 3 位数字结尾的值。

所以用这个:

SELECT IIF(
  account LIKE 'adm.*###' ,
  MID(account, 5, LEN(account) - 7),
  MID(account, 8)
) AS result
FROM tablename
WHERE account LIKE 'adm.*###' OR account LIKE 'adm.[!0-9][!0-9]#[!0-9]*'

如果除了这两种类型之外没有其他值,那么您可以删除WHERE 子句。

样本数据的结果:

result
ahrgrst
dhdujhd
hdjhh
haidhidh
hshiksh
ehuioe

【讨论】:

  • 非常感谢,今天你救了我两次
  • @prider 很好,如果它有效。我还为您之前的问题提供了一个更简单的解决方案。
  • 非常感谢@forpas,你帮了我很多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多