Database 如何编写查询以获取数据并跳过sql中特殊记录的4个首字母
我无法从数据库中读取数据。有人能帮我写一个适合我的查询吗Database 如何编写查询以获取数据并跳过sql中特殊记录的4个首字母,database,sqlite,android-sqlite,Database,Sqlite,Android Sqlite,我无法从数据库中读取数据。有人能帮我写一个适合我的查询吗 Select name1, name2 if (name2 start with "abcd" or "bcda" or "dasd" then skip 4 first Characters ) From TableName where name2 like 'Input' 让我们看一看问题:我想获得name2的数据。类似于“输入”的数据,但首先我想检查名称2是否以abcd开头,然后我不想显示名称2的前4个字符 编辑:我忘了
Select name1, name2
if (name2 start with "abcd" or "bcda" or "dasd" then skip 4 first Characters )
From TableName
where name2 like 'Input'
让我们看一看问题:我想获得name2的数据。类似于“输入”的数据,但首先我想检查名称2是否以abcd开头,然后我不想显示名称2的前4个字符
编辑:我忘了我应该检查两个不同的参数,然后我添加了一个or,而且我正在为android开发一个应用程序并使用SQlite
我希望我能解释清楚,同时为我的英语感到抱歉
编辑2:我对代码还有问题。它不能很好地显示4个首字母,但问题是它返回这4个首字母。此代码是单词词典的搜索部分。我附上一张照片,让你看清楚
这是如何编码您所要求的内容
Select name1, name2,
case when left(name2,4) = 'abcd'
then substring(name2,4)
else name2
end as name2
From TableName
where name2 like 'Input'
如果您的RDMBS支持regexp函数,如regex_replace,那么这很简单:
regexp_replace(name2, '^(abcd)|(bcda)', '') as name2
这将适用于Oracle、Postgres、MySQL 8.0、PrestoDB、BigQuery、DB2、Sybase,可能还有更多我现在没有想到的东西
在SQLIte中,可以使用字符串函数和大小写表达式:
select
name1,
case when substr(name2, 1, 4) in ('abcd', 'bcda')
then substr(name2, 5, length(name2) - 4)
else name2
end as name2
from mytable
where name2 = 'input'
注意:name2类似于'input'相当于name2='input',因为没有通配符起作用 用您正在使用的数据库标记您的问题。示例数据和所需结果非常有用,特别是当英语不是您的第一语言时。您的case子句也可以在MS T-SQL中编码为iifleftname2='abcd',substringname2,4,name2。@DavidRTribble-true-如果可能的话,我试图使用标准SQL。@Hogan感谢您的回答,但我无法在sqlite上通过此查询获取数据。我还编辑了我的问题,你能再检查一遍吗?@Hogan你能帮我解决这个问题吗?我编辑了问题并添加了新信息。thankserr它是如何改变的——仅仅是sqlite@Shayegan?@Hogan:补充道!感谢您的回复,我正在使用sqlite,我不知道它是否支持regex_替换。由于我是新手,我需要完整的代码:@Shayegan:我在回答中添加了一个sqlite解决方案。我可以在一行中编写所有代码吗?我还为check 2或添加了另外两个参数。怎么可能?感谢名字2喜欢“输入”,它工作得很好。谢谢
select
name1,
case when substr(name2, 1, 4) in ('abcd', 'bcda')
then substr(name2, 5, length(name2) - 4)
else name2
end as name2
from mytable
where name2 = 'input'