小编Qui*_*ith的帖子

获取SQL Server中的第一天

我试图按周分组记录,将汇总日期存储为一周的第一天.但是,我用于舍入日期的标准技术似乎在几周内没有正常工作(尽管它确实存在了几天,几个月,几年,几个季度以及我应用它的任何其他时间范围).

这是SQL:

select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0);
Run Code Online (Sandbox Code Playgroud)

返回2011-08-22 00:00:00.000,这是星期一,而不是星期日.选择@@datefirst返回7,这是星期日的代码,所以据我所知,服务器设置正确.

通过将上面的代码更改为:我可以轻松地绕过这个:

select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1);
Run Code Online (Sandbox Code Playgroud)

但事实上,我必须做出这样的例外让我有点不安.此外,如果这是一个重复的问题,请道歉.我发现了一些相关问题,但没有一个专门解决这个问题.

t-sql sql-server date sql-server-2008

88
推荐指数
5
解决办法
18万
查看次数

DebuggerStepThrough被忽略

我最近注意到,Visual Studio 2010调试器不断跳转到使用该[DebuggerStepThrough]属性标记的此方法.

Visual Studio 2010步入DebuggerStepThrough区域

callstack看起来像这样:

  1. Page.OnLoad 在标记为的类中调用方法IsSubclassOfGeneric[DebuggerStepThrough].
  2. IsSubclassOfGeneric如图所示调用GetHierarchy,将lambda表达式传递给System.Linq.Enumerable.Any扩展.
  3. Visual Studio将进入如上所示的方法.

我刚刚用foreach循环替换了Linq调用,如下所示,无济于事:

调用GetHierarchy

这有点令人烦恼,因为这种方法被频繁调用,我不明白为什么要忽略该属性.

debugging visual-studio-2010

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

复杂的TSQL order by子句

是否可以设计ORDER BY子句以确保两个字段(均为INT类型)的以下条件child,parent分别为此示例调用.

  1. parent引用child,但可以为null.
  2. 父母可以有多个孩子; 一个孩子只有一个父母.
  3. 孩子不能成为自己的父母.
  4. 必须至少有一个没有父母的孩子.
  5. child必须在出现在parent有序结果集中之前显示每个值.

我在第5点遇到困难.

样本无序数据:

child parent
------------
1     NULL
3     5
4     2
2     5
5     NULL
Run Code Online (Sandbox Code Playgroud)

显然既不ORDER BY a, bORDER BY b, a工作.事实上,我越是想到它,我不确定它甚至可以完成.鉴于这些限制,明显的情况如:

child parent
------------
1     2
2     1
Run Code Online (Sandbox Code Playgroud)

是不允许的,因为它违反了规则3和4(显然是5).

那么,我正在努力实现的目标,如果是这样,怎么样?平台是SQL Server 2005.

更新:样本数据的所需排序顺序:

child parent
------------
1     NULL
5     NULL
2     5
3     5
4     2
Run Code Online (Sandbox Code Playgroud)

对于在父列中定义非空值的每一行,该值已存在于子列中.

sql t-sql sql-server-2005

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

为什么我的ELF哈希实现具有如此高的冲突率

我目前正在努力选择一些用于Object.GetHashCode()覆盖的通用散列函数.最初,根据本网站的推荐,我开始使用ELF.我的C#实现如下:

public int Generate(byte[] key) {
    const uint c = 0xf0000000;

    uint h = 0,
         g = 0;

    unchecked {
        for (int i = 0, len = key.Length; i < len; i++) {
            h = (h << 4) + key[i];

            if ((g = h & c) != 0)
                h ^= g >> 24;

            h &= ~g;
        }
    }

    return (int)h;
}
Run Code Online (Sandbox Code Playgroud)

我的测试用例包括524,288个唯一值,分为短(1-64)和长(256-2048)字符串(有限的ASCII字符集)和任意二进制数据(每个131,072),以在各种情况下测试每个算法.

我也理解这个测试场景的局限性.散列算法在散列(例如URL)时可能表现异常,但在散列JPG或其他东西时可能会很糟糕.在我看来,随机字符串/二进制是选择通用函数的最佳起点.我很高兴听到为什么不是这种情况的原因.

我执行了3次单独的测试运行(每次生成一组新的随机字符串/字节)并对结果进行平均.

与我正在测试的其他算法相比,ELF算法产生了可怕数量的冲突:

  • 短串:817次碰撞(约0.5%失败率).
  • 短二进制:550次冲突(~0.4%失败率)
  • 长串/二进制:34次冲突(~0.025%失败率).

为了将其置于上下文中,我测试的其他3种算法平均在相同测试的平均3-10次碰撞之间产生.它也是4中最慢的,所以在这一点上它似乎完全没用.

完整结果:

           Strings     Binary
Algorithm  short:long  short:long
ELF …

.net c# hash

7
推荐指数
3
解决办法
2369
查看次数

带有名称空间的自定义配置部分问题的Intellisense

我刚刚滚动了一个自定义配置部分,为Intellisense创建了一个随附的架构文档,并根据Michael Stum对另一个类似问题的回答将其添加到Web.config的Schemas属性中。

不幸的是,可能是由于我是用有限的知识手工创建XSD的,所以Intellisense依赖于一个xmlns属性,该属性指向自定义config元素中存在的XSD文件的名称空间。但是,在运行项目时,我得到了无法识别的属性“ xmlns”。请注意,属性名称是区分大小写的错误。

我可能可以修改我的XSD文件以定义该xmlns元素的属性,但是我想知道这是否只是对较大问题的临时解决方案。我必须承认,我对XML名称空间没有很好的了解,因此这可能是让我直接了解一些事情的机会。

这是XSD文件的根xs:schema元素的属性:

<xs:schema id="awesomeConfig"
           targetNamespace="http://awesome.com/schemas"
           xmlns="http://awesome.com/schemas"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    ...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

在Web.config文件中创建元素时,Visual Studio 2008会自动追加:

<awesomeConfig xmlns="http://awesome.com/schemas"></awesomeConfig>
Run Code Online (Sandbox Code Playgroud)

因此,我是否完全误解了xs:schema属性的含义,还是正确的解决方案似乎看起来那么简单?

.net intellisense configurationsection

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