小编spe*_*593的帖子

如何识别存储在Oracle DATE列中的无效(损坏)值

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 oracle date oracle10g

13
推荐指数
2
解决办法
2万
查看次数

使用结果集系列中的最新非NULL值替换NULL值(SQL Server 2008 R2)

对于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

7
推荐指数
2
解决办法
1万
查看次数

只要包含的值为IS NULL,SQL查询就会为SUM(表达式)返回NULL

对于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 sql null aggregate-functions

4
推荐指数
1
解决办法
6785
查看次数

如何获取 MySQL 客户端连接持有的命名 MySQL 锁列表

对于 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 语句获取的表锁)

mysql

3
推荐指数
1
解决办法
5213
查看次数

SQL组查询从两个表中获取数据

我有一张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)

mysql sql t-sql sql-server sql-server-2008

2
推荐指数
1
解决办法
1300
查看次数

在默认MySQL值中执行计算

有没有办法使用DEFAULTMySQL 的默认值属性(即列定义的子句)基于相同或不同表中某些其他列的值执行计算?

我们可以为任何列设置静态默认值,但是我们可以执行计算或查询其他表的数据吗?

编辑

让我们说一个表格,其中包含列marks和其他total_marks第三列percentage.如何设置percentage要从前两列计算的默认值

mysql database

1
推荐指数
1
解决办法
3543
查看次数

mysql中使用union时如何查找哪个表包含记录

我想要在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)

mysql sql union

1
推荐指数
1
解决办法
1071
查看次数