我正在使用PostgreSQL 8.4在OS X上的Rails中开发一个应用程序.我需要为应用程序设置数据库,以便标准文本查询不区分大小写.例如:
SELECT*FROM documents WHERE title ='令人难以置信的文件'
应该返回相同的结果:
SELECT*FROM documents WHERE title ='Incredible Document'
为了清楚起见,我不想使用:
(1)LIKE在where子句或任何其他类型的特殊比较运算符中
(2)列数据类型或任何其他特殊列索引的citext
(3)任何类型的全文软件,如Sphinx
我想要的是设置数据库区域设置以支持不区分大小写的文本比较.我在Mac OS X(10.5 Leopard)上并且已经尝试将编码设置为"LATIN1",Collation和Ctype都设置为"en_US.ISO8859-1".到目前为止没有成功.
非常感谢任何帮助或建议.
谢谢!
更新
我已经标出了一个答案,作为正确答案,尊重那些回答的人.但是,我选择以不同于建议的方式解决这个问题.在进一步审查应用程序之后,只有少数几个实例需要对数据库字段进行不区分大小写的比较,因此我将为需要进行不区分大小写的比较创建影子数据库字段.例如,name和name_lower.我相信我在某个地方遇到了这个解决方案.希望PostgreSQL允许类似的SQL Server在未来提供的排序选项(即DOCI).
特别感谢所有回复的人.
我在这里和网上搜索但没有回答.
我问的原因是,由于F#约定似乎他们喜欢非大写字母,使用带有Pascal约定的BCL类型在F#中看起来很奇怪,如:
let stringD = String.Join(" ",[| stringA; stringB |])
Run Code Online (Sandbox Code Playgroud)
看起来它更符合F#的精神:
let stringD = string.join(" ",[| stringA; stringB |])
Run Code Online (Sandbox Code Playgroud) 我的.emacs文件中有很多自定义内容:字体,颜色,窗口大小,键绑定等等.所有这些都有效.
然后在最后,我刚刚添加了:(setq case-fold-search nil).这是一个变量,当设置nil为应该在所有emacs模式下使搜索区分大小写时.它不适合我.
在单个缓冲区中设置case-fold-search为nil有效,但是当我将其设置为时.emacs,它不起作用.是否有理由为什么a中的setq声明.emacs有时可能不起作用?我该如何尝试调试此问题?
我尝试为IQuerable构建扩展方法,如下所示:
public static IQueryable<T> FilterByString<T>(this IQueryable<T> query,
Expression<Func<T, string>> propertySelector,
StringOperator operand,
string value)
Run Code Online (Sandbox Code Playgroud)
这将概括如下:
query.Where(o => o.Name.ToLower().StartsWith(filterObject.Name.ToLower()))
Run Code Online (Sandbox Code Playgroud)
成:
q.FilterByString(o => o.Name, filterObject.NameOperator, filterObject.Name)
Run Code Online (Sandbox Code Playgroud)
允许设置过滤运算符(即EndsWith,Contains).
我在google上看到了一些区分大小写的解决方案,需要使用属性的名称作为字符串而不是stron类型的propertySelectorExpression.我也看到使用IndexOf()的不敏感的Contains()实现的解决方案,它们似乎不符合我的需要.
现在我有这个,但它不起作用(在"ToLower()"调用上激动):
static MethodInfo miTL = typeof(String).GetMethod("ToLower", System.Type.EmptyTypes);
static MethodInfo miS = typeof(String).GetMethod("StartsWith", new Type[] { typeof(String) });
static MethodInfo miC = typeof(String).GetMethod("Contains", new Type[] { typeof(String) });
static MethodInfo miE = typeof(String).GetMethod("EndsWith", new Type[] { typeof(String) });
public static IQueryable<T> FilterByString<T>(this IQueryable<T> query,
Expression<Func<T, string>> propertySelector,
StringOperator operand,
string value)
{
Expression constExp = …Run Code Online (Sandbox Code Playgroud) 我用来编写一个select查询,like语句的值是动态的.
AND e.rank_request_id = a.request_id
AND f.priority_request_id = a.request_id
AND b.status_type_id = c.status_id
AND b.status_request_id = a.request_id
AND a.request_id LIKE '%#form.searchbar#%'
Run Code Online (Sandbox Code Playgroud)
但是只有匹配字符串#form.searchbar#中每个字符的Case时,才会返回结果.
请为此建议一个解决方法,以便它变得不区分大小写.
我正在寻找远程分支并陷入某种循环.
我取一次然后得到:
$ git fetch
* [new branch] minorRelease/something-> origin/minorRelease/something
Run Code Online (Sandbox Code Playgroud)
然后我再次获取并得到:
$ git fetch
* [new branch] minorRelease/Something-> origin/minorRelease/Something
Run Code Online (Sandbox Code Playgroud)
相同的分支但有资本S.
我试图从以下文件夹中删除该文件.git/refs/remotes/origin/minorRelease,但是当再次获取时,我得到两个并返回上面的循环:
$ git fetch
* [new branch] minorRelease/Something-> origin/minorRelease/Something
* [new branch] minorRelease/something-> origin/minorRelease/something
Run Code Online (Sandbox Code Playgroud) 这里有类似的问题Elasticsearch Map对not_analyzed文件不敏感,但是我的处理方式略有不同,因为我处理的是特殊字符.
大多数人建议keyword analyzer结合使用lowercase filter.但是,这对我的情况不起作用,因为关键字分析器在空格上标记,特殊字符如^, #, etc.这打破了我想要的支持类型.
即
^HELLOWORLD应该匹配搜索^helloworld,但不是helloworld#FooBar应该匹配#foobar但不匹配foobar.Foo Bar应该匹配foo bar,但不是foo或bar.与我们在此处看到的类似功能https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_filter_with_numbers,但不区分大小写.
有谁知道如何做到这一点?
似乎我的问题的核心是多字段,因为关键字+小写似乎解决了标题中提出的问题.但是,为多字段值属性提出此问题会更准确.
test_mapping.json:
{
"properties" : {
"productID1" : {
"type" : "string",
"index_analyzer" : "keyword_lowercase",
"search_analyzer" : "keyword_lowercase"
},
"productID2" : {
"type": "multi_field",
"keyword_edge_ID": {
"type": "string",
"index_analyzer":"keyword_lowercase_edge",
"search_analyzer":"keyword_lowercase_edge"
},
"productID2": {
"type": "string",
"index": "analyzed",
"store": …Run Code Online (Sandbox Code Playgroud) 我想在我的mongodb数据库中搜索一个集合.在我的收藏中,我有"name"字段的文档可以是以下值:
[i]"PalácioGuanabara","PaláciodaCidade","FestaPalácio"等.
当用户键入"pala"或"palá"或"Pala"或"PalÁ"之类的搜索时,[i]中的所有这些都必须构建结果集.
我发现在MongoDB中我可以在搜索中使用正则表达式,例如:
{ "name": { $regex: new Regex(".*pala.*", "i") } }
Run Code Online (Sandbox Code Playgroud)
好的,这种方法不区分大小写,并使用SQL中的百分比逻辑("%pala%").但是,它不会忽略数据库中寄存器的重音.
我找到了另一个使用$ text索引的替代方法:https://docs.mongodb.org/manual/core/index-text/
这种方法可以忽略区分大小写和重音.但"搜索"不接受正则表达式,因此我无法搜索"%pala%"之类的内容.
总结一下,我想在MongoDB中进行以下SQL查询:
select * from collection where remove_accents(upper(name)) like '%Pala%'
Run Code Online (Sandbox Code Playgroud)
此查询返回的结果名称为"palácio","palacio","PaláCiô"等.
我想按字母顺序对值进行排序,忽略区分大小写并返回键列表.
/**
* This method will sort allCostPlanDetailsRows based on Value in <Key,Value> pair
*
* @param sortingOrder_ whether to sort the LinkedHashMap in Ascending order or Descending order
* @return List<String> returns List of costPlanDetailsRowId in sorted order
*/
private List<String> sortCostPlanDetailRows( SortingOrder sortingOrder_ )
{
return _allCostPlanDetailRows
.entrySet()
.stream()
.sorted( sortingOrder_ == SortingOrder.DESC ? Map.Entry.<String, String>comparingByValue(Comparator.nullsFirst(Comparator.naturalOrder())).reversed() : Map.Entry.comparingByValue(Comparator.nullsFirst(
Comparator.naturalOrder())) )
.map( Map.Entry::getKey )
.collect( Collectors.toList() );
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
注意:如果我可以改进上面的代码,欢迎提出建议.
我想在预处理器中检查文件系统是否区分大小写。到目前为止,我一直认为macOS始终具有不区分大小写的路径,但是最近我读到它取决于文件系统。我只需要一种方法来进行此签入#if,因此可以相应地设置数组大小。
case-insensitive ×10
macos ×2
c ×1
c# ×1
coldfusion ×1
dot-emacs ×1
dynamic ×1
emacs ×1
f# ×1
filesystems ×1
git ×1
git-fetch ×1
java ×1
java-8 ×1
java-stream ×1
linq ×1
locale ×1
mongodb ×1
mongoose ×1
oracle ×1
postgresql ×1
querying ×1
sql ×1
string ×1
variables ×1