Case-Insensitive匹配SQL / shell脚本

时间:2015-04-08 17:39:57

标签: sql shell unix scripting

#!/bin/ksh

echo "enter user ID\n"

read user_ID

echo "Searching user id $user_ID"

variable1=`sqlplus -s /  <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF ESCAPE '\'
select hr_id from users where hr_id LIKE '%\$user_ID %';
EXIT;
EOF`

if [ -n "$variable1" ];
then
echo "deleting the id $variable1"

variable2=`sqlplus -s /  <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF ESCAPE '\'
delete from users where hr_id= '$user_ID';

else
echo "Please enter correct user ID."
fi

我需要sql查询来从db中搜索正确的用户ID,即使它以任何格式提供

select hr_id from users where hr_id LIKE '%\$user_ID %';

我想删除用户ID ab123c。如果用户提供aBc123C任何案例格式,它应该从db中搜索并查找ab123c本身,因为提供的ID将是唯一的。

用户ID可以是AB12C,ab12c或&#39; ab12c&#39;他们中的任何人都不确定。只有已知的东西是字母,id中提供的数字将与提供的顺序相同,并且是唯一的。

3 个答案:

答案 0 :(得分:1)

尝试类似这样的事情,如果您确定这些名称是唯一的,只需将它们都投射到小写字母:

select hr_id from users where LOWER(hr_id) LIKE LOWER('%\$user_ID%');

答案 1 :(得分:1)

您可以尝试:

SELECT hr_id FROM users WHERE hr_id LIKE '%\$user_ID %' COLLATE utf8_general_ci;

甚至:

SELECT hr_id FROM users WHERE LOWER(hr_id) LIKE LOWER('%\$user_ID %');

如果您正在使用PostgreSQL:

SELECT hr_id FROM users WHERE hr_id ILIKE '%\$user_ID %';

答案 2 :(得分:0)

告诉你的shell user_ID是小写的:

typeset -l user_ID
read user_ID
echo ${user_ID}