Oracle 10.2.0.5
在DATE列中标识表中具有"无效"值的行的最简单方法是什么.这里的"无效"是指我的意思是违反Oracle日期值规则的二进制表示.
我最近遇到了一个存储在列中的无效日期的问题.
我能够使用查询谓词来查找特定的有问题的行:
WHERE TO_CHAR(date_expr,'YYYYMMDDHH24MISS') = '00000000000000'
Run Code Online (Sandbox Code Playgroud)
在我的情况下,世纪字节无效......
select dump(h.bid_close_date) from mytable h where h.id = 54321
Typ=12 Len=7: 220,111,11,2,1,1,1
Run Code Online (Sandbox Code Playgroud)
世纪字节应该是100 +两位数世纪.在这种情况下,增加了额外的100,好像世纪价值是"120",使得年份"12011".(我知道将无效DATE值引入数据库的唯一方法是使用OCI,使用本机7字节DATE表示.)
在这种情况下,TO_CHAR函数返回一个可识别的字符串,我可以用它来识别不稳定的DATE值.
我的问题:是否有更通用或更简单的方法(最好使用SQL SELECT语句)来识别DATE列中具有"无效"值的行.
对于SQL Server 2008 R2
我有一个看起来像这样的结果集(注意[price]是数字,下面的NULL表示一个NULL值,结果集按product_id和timestamp排序)
product timestamp price
------- ---------------- -----
5678 2008-01-01 12:00 12.34
5678 2008-01-01 12:01 NULL
5678 2008-01-01 12:02 NULL
5678 2008-01-01 12:03 23.45
5678 2008-01-01 12:04 NULL
Run Code Online (Sandbox Code Playgroud)
我想将其转换为(基本上)从最新的前一行复制非空值的结果集,以生成如下所示的结果集:
product timestamp price
------- ---------------- -----
5678 2008-01-01 12:00 12.34
5678 2008-01-01 12:01 12.34
5678 2008-01-01 12:02 12.34
5678 2008-01-01 12:03 23.45
5678 2008-01-01 12:04 23.45
Run Code Online (Sandbox Code Playgroud)
我没有找到允许我这样做的聚合/窗口函数(再次这只是SQL Server 2008 R2所需要的.)
我希望找到一个分析聚合函数来为我做这个,比如......
LAST_VALUE(price) OVER (PARTITION BY product_id ORDER BY timestamp)
Run Code Online (Sandbox Code Playgroud)
但我似乎没有找到任何方法在窗口中执行"累积最新的非空值"(将窗口绑定到前面的行,而不是整个分区)
除了创建一个表值用户定义的函数之外,是否有任何内置函数可以实现此目的?
更新:
显然,此功能在"Denali"CTP中可用,但在SQL Server 2008 R2中不可用.
LAST_VALUE http://msdn.microsoft.com/en-us/library/hh231517%28v=SQL.110%29.aspx …
sql-server aggregate-functions analytic-functions sql-server-2008-r2
对于MySQL,我想要一个返回表达式的SUM的查询,EXCEPT我希望如果SUM中包含的任何表达式为NULL,则返回的值为NULL.(SUM的正常操作是忽略NULL值.
这是一个简单的测试用例
CREATE TABLE t4 (fee VARCHAR(3), fi INT);
INSERT INTO t4 VALUES ('fo',10),('fo',200),('fo',NULL),('fum',400);
SELECT fee, SUM(fi) AS sum_fi FROM t4 GROUP BY fee
Run Code Online (Sandbox Code Playgroud)
这将返回我期望的结果集:
fee sum_fi
--- ------
fo 210
fum 400
Run Code Online (Sandbox Code Playgroud)
我想要的是一个返回不同结果集的查询:
fee sum_fi
--- ------
fo NULL
fum 400
Run Code Online (Sandbox Code Playgroud)
我想要的是,只要包含的值为NULL,sum_fi返回的值就为NULL.(这与SUM聚合函数不同,忽略NULL,并返回非NULL表达式的总计.)
问题:我可以使用什么查询来返回所需的结果集?
我没有找到任何表现出这种行为的内置聚合函数.
对于 MySQL 5.1,有没有办法获取 MySQL 客户端连接持有的命名 MySQL“锁”列表?
我知道如果我知道锁的名称,我可以检查特定的命名锁。但我想知道如何(如果可能)列出持有(或等待)命名锁的客户端连接,特别是每个客户端持有的锁的名称。
我在这里询问有关获取、释放、检查等的命名锁。通过 MySQL GET_LOCK、RELEASE_LOCK、IS_FREE_LOCK 和 IS_USED_LOCK 函数。
http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_get-lock
(注意:我不是在询问 LOCK TABLE 语句获取的表锁)
我有一张department桌子和user桌子,显然每个员工都在不同的部门.
我希望分别获得每个部门的所有用户.我可以按小组或......来做吗?
我的尝试如下,但没有给我预期的结果:
select username,b.deptName
from user a
inner join dept b
on a.dept=deptId group by deptName
Run Code Online (Sandbox Code Playgroud)
PS:我需要一个SQL查询来获取不同部门的员工,而不是每个部门都有一个单独的查询!
样本数据
User(Table)
username dept
John 1
Jack 2
Sam 1
Tedy 1
Tom 2
Sara 2
dept:(Table)
deptId deptName
1 HR
2 IT
My Desired result:
HR:John-Sam-Tedy
IT:Jack-Tom-Sara
Run Code Online (Sandbox Code Playgroud) 有没有办法使用DEFAULTMySQL 的默认值属性(即列定义的子句)基于相同或不同表中某些其他列的值执行计算?
我们可以为任何列设置静态默认值,但是我们可以执行计算或查询其他表的数据吗?
编辑
让我们说一个表格,其中包含列marks和其他total_marks第三列percentage.如何设置percentage要从前两列计算的默认值
我想要在mysql中使用union时包含记录的表名。我想从该表中删除记录,否则我必须遍历所有表并找到记录并手动删除。
查询:
SELECT id FROM table1 WHERE cfid='2'
UNION
SELECT id FROM table2 WHERE ob_id='2'
UNION
SELECT id FROM table3 WHERE jid='2'
Run Code Online (Sandbox Code Playgroud)