在UPPER

时间:2015-10-15 20:18:15

标签: mysql sql tsql

我正在尝试查询一个值为ONeil的sql server表。我的目标是为查询的数据添加撇号。我知道从源代码(在PHP中)修复问题会更容易,但无法访问这些脚本

表格结构,

ID      First_Name     Last_Name
1       John           ONEil
2       Sam            OMally
3       Sarah          OConner

6 个答案:

答案 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开始) 它可以帮助您找到两个第一个大写字母。

了解更多:

https://msdn.microsoft.com/en-us/library/ms187748.aspx

https://msdn.microsoft.com/en-us/library/ms177545.aspx