我的问题类似于这个 MySQL问题,但是用于SQL Server:
是否有函数或查询将返回两个日期之间的天数列表?例如,假设有一个名为ExplodeDates的函数:
SELECT ExplodeDates('2010-01-01', '2010-01-13');
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含以下值的列表:
2010-01-01
2010-01-02
2010-01-03
2010-01-04
2010-01-05
2010-01-06
2010-01-07
2010-01-08
2010-01-09
2010-01-10
2010-01-11
2010-01-12
2010-01-13
Run Code Online (Sandbox Code Playgroud)
我认为日历/数字表可能能够帮助我.
更新
我决定查看提供的三个代码答案,执行结果 - 占总批次的百分比 - 是:
越低越好
我已经接受了Rob Farley的答案,因为它是最快的,尽管数字表解决方案(KM和StingyJack在他们的答案中使用)都是我的最爱.Rob Farley的速度提高了三分之二.
更新2
阿丽维亚的答案更为简洁.我已经改变了接受的答案.
对于某些类型的SQL查询,辅助数字表可能非常有用.它可以创建为具有特定任务所需的行数的表,也可以创建为返回每个查询所需行数的用户定义函数.
创建这样一个函数的最佳方法是什么?
如何使用SQL Server返回包含非ASCII字符的行?
如果你能展示如何为一个列做这件事会很棒.
我现在正在做这样的事情,但它没有用
select *
from Staging.APARMRE1 as ar
where ar.Line like '%[^!-~ ]%'
Run Code Online (Sandbox Code Playgroud)
对于额外的功劳,如果它可以跨越表中的所有 varchar列,那将是非常出色的!在这个解决方案中,返回三列是很好的:
Id | FieldName | InvalidText |
----+-----------+-------------------+
25 | LastName | Solís |
56 | FirstName | François |
100 | Address1 | 123 Ümlaut street |
Run Code Online (Sandbox Code Playgroud)
无效字符可以是SPACE(32 10)到~(127 10)范围之外的任何字符
我有一个应用程序需要显示过去30天内的活动条形图.即使当天没有任何活动,图表也需要显示所有日期.
例如:
DATE COUNT
==================
1/1/2011 5
1/2/2011 3
1/3/2011 0
1/4/2011 4
1/5/2011 0
etc....
Run Code Online (Sandbox Code Playgroud)
我可以在查询之后进行后期处理以找出缺少的日期并添加它们但是想知道在SQL Server中是否有更简单的方法.非常感谢
如何计算两个日期之间的营业时间?例如,我们有两个日期; 01/01/2010 15:00和04/01/2010 12:00我们工作时间的工作时间是09:00到17:00如何用sql计算工作时间?
我是sql server的新手.我需要生成从给定日期范围中选择的随机日期.就像员工的就业日期应该在2011-01-01和之间的任何地方2011-12-31.生成的日期应随机插入1000行表中.
任何人都可以用我的查询指导我吗?
我有一张看起来像的桌子
ID Layout
1 hello,world,welcome,to,tsql
2 welcome,to,stackoverflow
Run Code Online (Sandbox Code Playgroud)
期望的输出应该是
Id Splitdata
1 hello
1 world
1 welcome
1 to
1 tsql
2 welcome
2 to
2 stackoverflow
Run Code Online (Sandbox Code Playgroud)
我已通过以下查询完成此操作
Declare @t TABLE(
ID INT IDENTITY PRIMARY KEY,
Layout VARCHAR(MAX)
)
INSERT INTO @t(Layout)
SELECT 'hello,world,welcome,to,tsql' union all
SELECT 'welcome,to,stackoverflow'
--SELECT * FROM @t
;With cte AS(
select F1.id
,O.splitdata
from
(
select *,
cast('<X>'+replace(F.Layout,',','</X><X>')+'</X>' as XML) as xmlfilter
from @t F
)F1
cross apply
(
select fdata.D.value('.','varchar(MAX)') as splitdata
from f1.xmlfilter.nodes('X') as …Run Code Online (Sandbox Code Playgroud) sql t-sql sql-server sql-server-2005 common-table-expression
我在几个数据库引擎中不时使用SQL几年但是理论知识很少,所以我的问题可能对你们中的某些人来说非常"愚蠢".但它现在变得很重要,所以我不得不问.
想象一下具有非唯一列的表Url status.对于这个问题,假设我们有大量的行和状态在每个记录中具有相同的值.
并想象我们执行多次查询:
SELECT * FROM Urls ORDER BY status
Run Code Online (Sandbox Code Playgroud)
我们每次都得到相同的行顺序吗?如果我们做了如果添加一些新行会发生什么?它是否会更改订单,或者新记录会附加到结果的末尾?如果我们没有获得相同的订单 - 在什么条件下依赖此订单?
不要ROW_NUMBER() OVER (ORDER BY status)将返回上述顺序相同,或者是基于不同的排序机制的查询?
运行SQL Server Express 2008.我为某些实用程序功能创建了"数字表".由于表填充是自动构建的一部分,因此每次部署时都会花费过多的时间.
冒着"过度优化"的风险,有人可以评论我如何能够尽快实现这一目标吗?也许玩索引填充因子或创建PK时?
IF EXISTS (SELECT * FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'Numbers') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
drop TABLE [Numbers]
end
CREATE TABLE [Numbers]
(
[Number] [int]
, CONSTRAINT [Index_Numbers] PRIMARY KEY CLUSTERED
(
[number] ASC
) ON [PRIMARY]
)
ON [PRIMARY]
Declare @cnt int
Select @cnt=0
SET NOCOUNT ON
while (@cnt<10000)
BEGIN
INSERT INTO NUMBERS(NUMBER) SELECT @cnt
SELECT @cnt=@cnt+1
end
Run Code Online (Sandbox Code Playgroud) 我使用以下代码在SQL Server中创建序列.但它将错误显示为未知对象类型.请给出一个解决方案
这是我的代码:
create sequence seqval start with 100 increment by 1 minvalue 0 maxvalue 0 no cycle
no cache;
Run Code Online (Sandbox Code Playgroud)
提前致谢