我正在尝试查询一个值为ONeil的sql server表。我的目标是为查询的数据添加撇号。我知道从源代码(在PHP中)修复问题会更容易,但无法访问这些脚本
表格结构,
ID First_Name Last_Name
1 John ONEil
2 Sam OMally
3 Sarah OConner
答案 0 :(得分:0)
您可以对前2个字符进行字符串比较,以找出哪些记录的姓氏以2个大写字母开头,如下所示:
create table test (Last_Name varchar(50));
insert into test values ('ONEil'), ('OMally'), ('OConner'), ('Michaels');
select * from test where hex(left(Last_Name, 2)) = hex(upper(left(Last_Name,2)))
Result:
Last_Name
ONEil
OMally
OConner
要更新这些记录,您可以:
update test
set Last_Name = concat(left(Last_Name, 1), '''', mid(Last_Name, 2, length(Last_Name)-2))
where hex(left(Last_Name, 2)) = hex(upper(left(Last_Name,2)))
select * from test;
Results:
Last_Name
O'NEi
O'Mall
O'Conne
Michaels
SQLFiddle示例:http://sqlfiddle.com/#!9/8165e4/2
答案 1 :(得分:0)
搜索前两个字符为大写的字符串:
的 LiveDemo 强>
CREATE TABLE #mytable(
ID INTEGER NOT NULL PRIMARY KEY
,First_Name VARCHAR(5) NOT NULL
,Last_Name VARCHAR(7) NOT NULL
);
INSERT INTO #mytable(ID,First_Name,Last_Name) VALUES (1,'John','ONEil');
INSERT INTO #mytable(ID,First_Name,Last_Name) VALUES (2,'Sam','OMally');
INSERT INTO #mytable(ID,First_Name,Last_Name) VALUES (3,'Sarah','OConner');
INSERT INTO #mytable(ID,First_Name,Last_Name) VALUES (4,'Sarah','Smith');
SELECT
ID,
First_Name,
Last_Name = CONCAT(LEFT(Last_Name, 1), '''', RIGHT(Last_Name, LEN(Last_Name)-1))
FROM #mytable
WHERE Last_Name LIKE '[A-Z][A-Z]%' COLLATE Latin1_General_BIN;
输出:
╔════╦════════════╦═══════════╗
║ ID ║ First_Name ║ Last_Name ║
╠════╬════════════╬═══════════╣
║ 1 ║ John ║ O'NEil ║
║ 2 ║ Sam ║ O'Mally ║
║ 3 ║ Sarah ║ O'Conner ║
╚════╩════════════╩═══════════╝
答案 2 :(得分:0)
表
mysql> select * from names where LEFT(last_name, 2) = UPPER(LEFT(last_name, 2));
+-----------+
| last_name |
+-----------+
| Michael |
| Blah |
| ONeil |
+-----------+
更新查询
update names
set last_name = concat(left(last_name, 1), '\'', right(last_name, length(last_name)-1))
where binary left(last_name, 2) = upper(left(last_name, 2))
and binary upper(left(last_name, 3)) <> left(last_name, 3);
结果
+-----------+
| last_name |
+-----------+
| Michael |
| Blah |
| O'Neil |
+-----------+
答案 3 :(得分:0)
如果要更新前2个字符为大写的last_name字段以包含撇号,那么我将发出更新查询:
update tablename set last_name=left(last_name,1) + char(146) + substring(last_name,2)
where binary upper(left(last_name,2))=left(last_name,2)
答案 4 :(得分:0)
您的问题需要更多说明,但我想您希望在前2个字符为大写时返回O'Neil
而不是ONeil
但如果不是Oneal
则返回select id, first_name, last_name,
case when left(last_name,2) = upper(left(last_name,2))
collate SQL_Latin1_General_CP1_CS_AS
then left(last_name,1) + '''' + right(last_name, len(last_name) - 1)
else last_name
end as new_last_name
from yourtable
?
如果是这样,这里有一个选项,使用整理,案例,上,左,右......
<ul class="products">
<li first post-11 product type-product status-publish has-post-thumbnail
product_cat-schimmelentferner sale taxable shipping-taxable purchasable
product-type-simple product-cat-schimmelentferner instock
答案 5 :(得分:0)
您可以使用两个功能来执行此操作。
第一个是SUBSTRING(剪切前两个字母) 第二个是ASCII(大写ASCII的数字从41到5A开始) 它可以帮助您找到两个第一个大写字母。
了解更多: