我正在尝试构造一个SQL语句,该语句从位于同一个表中的多个列返回唯一的非空值.
SELECT distinct tbl_data.code_1 FROM tbl_data
WHERE tbl_data.code_1 is not null
UNION
SELECT tbl_data.code_2 FROM tbl_data
WHERE tbl_data.code_2 is not null;
Run Code Online (Sandbox Code Playgroud)
例如,tbl_data如下:
id code_1 code_2
--- -------- ----------
1 AB BC
2 BC
3 DE EF
4 BC
Run Code Online (Sandbox Code Playgroud)
对于上表,SQL查询应返回两列中的所有唯一非空值,即:AB,BC,DE,EF.
我对SQL很新.我上面的声明有效,但有没有更简洁的方法来编写这个SQL语句,因为这些列来自同一个表?
我正在尝试在Access中编写VBA函数,用标准的美国邮政缩写替换地址字段中的单词.我意识到这永远不会是完美的,但我想至少制作简单的缩写(无需购买地址格式化软件),例如
input output
------- -------------
North -> N
Street -> ST
Drive -> DR
Lane -> LN
Run Code Online (Sandbox Code Playgroud)
我想过使用一个简单的表来存储字符串和替换字符串,然后循环遍历该表/记录集以执行简单的搜索并使用该Replace()函数替换,例如使用immediate window:
?Replace("123 North 3rd St", "North", "N", compare:=vbTextCompare)
123 N 3rd St
Run Code Online (Sandbox Code Playgroud)
但是,这种方法可能会导致错误,例如
?Replace("123 Northampton St", "North", "N", compare:=vbTextCompare)
123 Nampton St
Run Code Online (Sandbox Code Playgroud)
我最初的策略是使用正则表达式模式和替换字符串创建替换表,然后遍历该表以进行更精确的搜索和替换.
pattern abbrev
------------------- ------------
{pattern for North} N
{pattern for Street} ST
Run Code Online (Sandbox Code Playgroud)
我意识到RegEx在这里可能有些过分,特别是因为我将在数据库中反复遍历地址字段,但是想到使用该Replace()函数时更容易想到更新(更新:请参阅@ mwolfe02和@Cylian,以及混合解决方案).
在上面的示例中,我想搜索单词North和Street,它们或者作为字符串中的单词存在(因此由两个空格分隔)或者在字符串的末尾或字符串的开头.这涵盖了大多数需要缩写的情况.例如
address formatted
---------------------- --------------------------
123 North 3rd …Run Code Online (Sandbox Code Playgroud) 我正在导入一个CSV文件,其中包含需要转换的字段,如下所示:
默认的CSV转换器与Date和DateTime字段不匹配。下面的这种方法似乎可行,但是想知道是否有更好的方法,可能是通过覆盖转换器使用的匹配模式?
require 'csv'
require 'date'
src = <<csv
active,date_created,date_modified
"True","03/12/2012","03/12/2012 2:14:23 PM"
"False","01/25/2011","03/12/2013 3:14:27 AM"
csv
CSV::Converters[:my_converters] = lambda{|field|
begin
case field.to_s
when "True"
true
when "False"
false
when /^\d{2}\/\d{2}\/\d{4}$/
Date.strptime(field,"%m/%d/%Y")
else
DateTime.strptime(field,"%m/%d/%Y %I:%M:%S %p")
end
rescue ArgumentError
field
end
}
csv = CSV(src, :headers => true, :converters => [:my_converters])
csv.each{|row| puts row}
Run Code Online (Sandbox Code Playgroud)
真实,2012-03-12,2012-03-12T14:14:23 + 00:00
假,2011-01-25,2013-03-12T03:14:27 + 00:00
我正在尝试使用记录集中的CDate()将文本字段转换为日期,但不断出现类型不匹配错误.输入文本格式为MMDDYYYY.CDate不承认这种格式吗?我需要一个单独的功能吗?有任何想法吗?
Text Date -> Converted Date
--------- --------------
04122012 -> 04/12/2012
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("tbl_dates", Type:=dbOpenDynaset)
Do Until rst.EOF
rst.Edit
rst![Converted Date]=CDate(rst![Text Date])
rst.Update
rst.MoveNext
Loop
Set rst = Nothing
Set db = Nothing
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Ruby 的注入来对表示有限连分数的数组求和,其中
[a, b, c, d, e, ... , x] = a + 1/(b + 1/(c + 1/(d + 1/(e + ... 1/x)...)))
Run Code Online (Sandbox Code Playgroud)
我不知道如何获得正确的嵌套评估以使用注入返回正确的值。
相反,我所写的只是返回各项的统一总和,而不是嵌套总和。例如,
[a, b, c, d, e, ... , x] = a + 1/(b + 1/(c + 1/(d + 1/(e + ... 1/x)...)))
Run Code Online (Sandbox Code Playgroud)
也就是说,
0 + 1/2 + 1/1 + 1/12 + 1/8 #=> 41/24
而不是
0 + 1/(2 + 1/(1 + 1/(12+1/8))) #=> 105/307,这是正确的值。
是否可以使用注入方法计算这种类型的总和?
如果不是,我怎样才能正确计算它?
我熟悉Access的查询和过滤条件,但我不确定如何表达类似于正则表达式模式的语句.我想知道是否有人可以帮助将它们与我理解的一些简单例子联系起来.
如果我使用正则表达式来匹配Access等字段,我将如何表达以下语句?示例与此Access Query和Filter Criteria网页上的示例类似.与在Access中一样,大小写不敏感.
"伦敦"
符合伦敦一词的字符串.
"伦敦"或"巴黎"
完全匹配伦敦或巴黎的字符串.
不是"伦敦"
任何字符串,但伦敦.
喜欢"S*"
以字母s开头的任何字符串.
喜欢"*st"
任何以字母st结尾的字符串.
喜欢"*the*dog*"
包含"the"和"dog"字样的任何字符串,包含之前,之间或结尾处的任何字符.
像"[AD]*"
任何以字母A到D开头的字符串,后跟其他任何字符串.
不喜欢"*伦敦*"
任何字符串都不包含伦敦这个词.
不喜欢"L*"
任何不以L开头的字符串
喜欢"L*"而不喜欢"伦敦*"
任何以字母L开头但不以伦敦字开头的字符串.
我正在尝试编写一个接受字符串的函数,解析它,并返回另一个字符串,该字符串汇总了原始字符串中连续的字母或数字字符的数量.
例如,字符串999aa45bbx将返回3N2A2N3A,即
我正在使用该功能来分析保险单ID号的格式.到目前为止,我发现在线解决方案提取字母或数字字符,但没有描述原始字符串中存在这些字符的格式或顺序.
有人可以帮忙吗?