SELECT TRIM(BOTH 'a' FROM 'aaaaaaaaaaaaasdfasa');
工作正常并返回sdfas 但我试图删除引号,所以我做了
SELECT TRIM(BOTH ''' FROM (''2565','5216','5364'') ;
我收到错误 - 查询在字符串或注释块中结束。请建议如何做到这一点
答案 0 :(得分:0)
此答案假设.NET应用程序成功插入数据,问题发生在SELECT
或UPDATE
时,即问题不在.NET应用程序中使用的准备好的SQL语句中。这也假定在WHERE .. IN
中使用此类逻辑的数据健全性检查已经到位。
假设您的数据值为:
2565,5216,5364
'2565','5216','5364'
您的申请会将这些内容转换为以下内容:
'2565,5216,5364'
''2565','5216','5364''
为了便于本答案的查询设计,我们可以通过使用额外的单引号转义值中的每个单引号,然后将整个内容放在一对单引号中来转换为SQL的字符串值。一串;这给了我们:
'''2565,5216,5364'''
'''''2565'',''5216'',''5364'''''
如果要删除这些中的所有单引号,可以使用
SELECT OREPLACE( '''2565,5216,5364''', '''', '');
SELECT OREPLACE( '''''2565'',''5216'',''5364''''', '''', '');
这意味着用空字符串替换所有单引号并给出:
2565,5216,5364
2565,5216,5364
如果您要与整数值进行比较,可能会采用这种方法。
现在,如果您希望保留数据并仅删除.NET应用程序放置的封闭引号(例如,如果比较也是字符数据),那么您可以将其与其他逻辑相结合。让我们使用第二个数据值,因为它为这样的操作提供了更多的值
SELECT TRIM(BOTH '''' FROM '''''2565'',''5216'',''5364''''');
上面的查询将为您提供以下结果,该结果将从应用程序中删除封闭的引号,但也会删除用户输入的第一个和最后一个引号
2565','5216','5364
更好的选择,但假设您的应用程序始终将数据用引号括起来
SELECT SUBSTR('''''2565'',''5216'',''5364''''',2,CHARACTER_LENGTH('''''2565'',''5216'',''5364''''')-2);
这将从字符串中的第二个字符执行子字符串操作直到length-2,因此将忽略应用程序插入的两个引号
'2565','5216','5364'