我想要做的就是按字母顺序抓住这些东西并忽略大写字母.
db.rawQuery("SELECT " + catName + " FROM "+tableName+" ORDER BY "+catName+" ASC COLLATE NOCASE;", null);
Run Code Online (Sandbox Code Playgroud)
这是我上面使用的代码,但它总是给我一个SQLite异常,说COLLATE是一个语法错误.
android.database.sqlite.SQLiteException:near"COLLATE":语法错误:,同时编译:SELECT Artist FROM testTable COLLATE NOCASE ASC
我导入了一个数据库,其中包含一些数据,以便与另一个数
目标数据库具有排序规则Latin1_General_CI_AS,源数据库具有排序规则SQL_Latin1_General_CP1_CI_AS.
我确实将源数据库的排序规则更改为Latin1_General_CI_AS使用SQL Server Management Studio.但是里面的表格和列仍然是旧的整理.
我知道我可以使用以下方法更改列:
ALTER TABLE [table]
ALTER COLUMN [column] VARCHAR(100) COLLATE Latin1_General_CI_AS
Run Code Online (Sandbox Code Playgroud)
但是我必须为所有表和内部的所有列执行此操作.
在我知道开始编写一个存储过程之前,它读取所有表并在所有类型的列中,varchar并在表和列游标循环中更改它们...
有没有人知道一个更简单的方法,或者是通过运行程序中所有表的脚本执行此操作的唯一方法?
我正在尝试查找包含大写6个或更多字母数字字符串的记录.一些例子:
PENDING 3RDPARTY CODE27
Run Code Online (Sandbox Code Playgroud)
我正在使用以下声明:
SELECT Details
FROM MyTable
WHERE Details LIKE '%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%';
Run Code Online (Sandbox Code Playgroud)
这将返回包含任何6个或更多字母单词的所有记录,无论大小写如何.
我添加了一个COLLATE声明:
SELECT Details
FROM MyTable
WHERE Details COLLATE Latin1_General_CS_AS LIKE '%[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]%';
Run Code Online (Sandbox Code Playgroud)
这没有任何改变.无论如何,它仍会返回带有6个或更多字母单词的记录.
就像测试一样,我试过:
SELECT Details
FROM MyTable
WHERE Details COLLATE Latin1_General_CS_AS LIKE '%pending%';
SELECT Details
FROM MyTable
WHERE Details COLLATE Latin1_General_CS_AS LIKE '%PENDING%';
Run Code Online (Sandbox Code Playgroud)
这两种方法都有效,分别返回包含"待定"和"待定"的记录.所以问题似乎是LIKE克劳斯的模式匹配.
如何执行区分大小写的搜索?
我希望能够进行规范化重音字符的查询,例如:
é, è, and ê
Run Code Online (Sandbox Code Playgroud)
在使用'='和'like'的查询中,所有都被视为'e'.我有一行将用户名字段设置为' rené ',我希望能够将它与' rene '和' rené ' 匹配.
我试图用MySQL 5.0.8中的'collate'子句来做这件事.我收到以下错误:
mysql> select * from User where username = 'rené' collate utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
Run Code Online (Sandbox Code Playgroud)
FWIW,我的表创建时:
CREATE TABLE `User` (
`id` bigint(19) NOT NULL auto_increment,
`username` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniqueUsername` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=56790 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud) 我试图加入两个表,但我收到此错误:
消息468,级别16,状态9,行8无法解决等于操作中"SQL_Latin1_General_CP1_CI_AS"和"Latin1_General_CI_AS"之间的排序规则冲突.
这是我使用的代码:
SELECT *
FROM [FAEB].[dbo].[ExportaComisiones] AS f
JOIN [zCredifiel].[dbo].[optPerson] AS p
ON (p.vTreasuryId = f.RFC) COLLATE Latin1_General_CI_AS
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,它强调了COLLATE.我不知道如何应用它.
我试图在两列之间用空格连续排列并得到一个排序错误:
SELECT DISTINCT
p.PERSON_ID,
p.ID_NUMBER,
CONCAT(p.FULLNAMES, CONCAT(' ', p.SURNAME)) AS NAME,
o.ORG_NAME,
w.WARD_DESCRIPTION AS WARD,
ess.DESCRIPTION AS SECTOR
Run Code Online (Sandbox Code Playgroud)
在concat操作中无法解决"SQL_Latin1_General_CP1_CI_AS"和"Latin1_General_CI_AS"之间的排序规则冲突
我的数据库中两个违规列的排序规则是: Latin1_General_CI_AS
所以我试图将空白整理到这个整理,但我不知道如何做到这一点.我的尝试:
CONCAT(p.FULLNAMES, (CONCAT((COLLATE Latin1_General_CI_AS = ' '), p.SURNAME))) AS NAME,
Run Code Online (Sandbox Code Playgroud)
或者其他的东西?
在Android中创建SQLite数据库时,我设置了数据库语言环境 - db.setLocale(new Locale("cz_CZ")).这是一个捷克语的地方.
SELECT语句起作用并考虑区域设置,例如:
SELECT * from table WHERE name='sctzy' COLLATE LOCALIZED
Run Code Online (Sandbox Code Playgroud)
会找到条目'ščťžý'.
但使用LIKE将失败:
SELECT * from table WHERE name LIKE '%sctzy%' COLLATE LOCALIZED
Run Code Online (Sandbox Code Playgroud)
没有返回任何行.
BTW.Android中没有java.text.Normalized类.我以为我可以用标准化的文本制作第二列,删除特殊字符,这些字符将用于搜索 - 但我缺少一个类或方法如何规范化String.
根据sqlite3文档,
每个列名后面的COLLATE子句定义用于该列中文本条目的整理顺序.默认整理顺序是在CREATE TABLE语句中为该列定义的整理顺序.或者,如果未定义整理顺序,则使用内置BINARY整理顺序.
整理顺序有什么作用,什么是BINARY整理顺序?
我有一个临时表,使用批量插入插入数据.但是,当我想将数据从临时表更新到普通表时,它会产生整理问题.我知道如何使用以下方法解决这个问题:
UPDATE RegularTable
SET r.Column1 = t.ColumnA
FROM RegularTable r INNER JOIN #TEMP t ON
r.Column1 COLLATE DATABASE_DEFAULT =
t.ColumnA COLLATE DATABASE_DEFAULT
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法立即在临时表中设置排序规则,因此您不必在连接中使用排序规则?就像是:
CREATE TABLE #TEMP
Column1 varchar(255) COLLATE database_default,
Column2 varchar(60)
Run Code Online (Sandbox Code Playgroud)
这是正确的编码,您是否必须为每个表或每列设置一次排序规则?如果在表格中设置了排序规则,那么您可以从连接中排除整理吗?
我一直在看这个代码,下面转载,寻找非ASCII字符......
select line,
patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line) as [Position],
substring(Line, patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line), 1) as [InvalidCharacter],
ascii(substring(line, patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line), 1)) as [ASCIICode]
from staging.APARMRE1
where patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, Line) > 0
Run Code Online (Sandbox Code Playgroud)
我只想告诉我,我想要声明一个变量,'%[^ !-~]%' COLLATE Latin1_General_BIN而不是每次都写出来,但是
declare @regex varchar(20) = '%[^ !-~]%' COLLATE Latin1_General_BIN;
select line,
patindex(@regex, Line) as [Position],
substring(Line, patindex(@regex, Line), 1) as [InvalidCharacter],
ascii(substring(line, patindex(@regex, Line), 1)) as [ASCIICode]
from staging.APARMRE1
where patindex(@regex, Line) > 0
Run Code Online (Sandbox Code Playgroud)
只是不做同样的事情.我只是缺少一些语法?这不可能吗?