CHECKSUM 
返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引。 语法 
CHECKSUM ( * | expression [ ,...n ] ) 参数 
* 指定在表的所有列上进行计算。如果有任一列是非可比数据类型,则 CHECKSUM 返回错误。不可比数据类型是 text、ntext、image、cursor 以及基本类型为前 4 个数据类型之一的 sql_variant。 expression 是除非可比数据类型之外的任何类型的表达式。 返回类型 
int 注释 
CHECKSUM 在其参数列表上计算一个称为校验值的哈希值。此哈希值用于生成哈希索引。如果 CHECKSUM 的参数是列,且在计算的 CHECKSUM 值上生成索引,则其结果是可用于在列上等价搜索的哈希索引。 CHECKSUM 满足哈希函数的下列属性:在使用等于 (=) 运算符比较时,如果两个列表的相应元素具有相同类型且"相等",则在任何两个表达式列表上应用的 CHECKSUM 将返回同一值。这种定义的目的在于:给定类型的 NULL 值被作为"相等"进行比较。如果表达式列表中的某个值发生变化,那么列表的校验值通常也会变化。但只在极少数情况下,校验值会保持不变。 BINARY_CHECKSUM 和 CHECKSUM 具有相似的功能:它们可用于计算表达式列表上的校验值,且表达式的顺序将影响结果值。在 CHECKSUM(*) 中使用的列顺序是在表或视图定义中指定的列顺序,包括计算列。 CHECKSUM 和 BINARY_CHECKSUM 仅为字符串数据类型返回不同的值,这类字符串的区域设置可能导致具有不同表示法的字符串进行等值比较。字符串数据类型是 char、varchar、nchar、nvarchar 或 sql_variant(如果其基本类型是字符串数据类型)。例如,字符串"McCavity"和"Mccavity"的 BINARY_CHECKSUM 值不同。反之,在不区分大小写的服务器中,上述字符串的 CHECKSUM 返回相同的校验值。CHECKSUM 值不应与 BINARY_CHECKSUM 值进行比较。 示例 
使用 CHECKSUM 生成哈希索引 
CHECKSUM 函数可以用于生成哈希索引。通过将计算校验值列添加到索引的表中,然后在校验值列上生成索引来生成哈希索引。 -- Create a checksum index. 
SET ARITHABORT ON 
USE Northwind 
GO 
ALTER TABLE Products 
ADD cs_Pname AS checksum(ProductName) 
CREATE INDEX Pname_index ON Products (cs_Pname) 校验值索引可用作哈希索引,尤其是当要索引的列为较长的字符列时可以提高索引速度。校验值索引可用于等价搜索。 /*Use the index in a SELECT query. Add a second search 
condition to catch stray cases where checksums match, 
but the values are not identical.*/ 
SELECT * 
FROM Products 
WHERE checksum(N'Vegie-spread') = cs_Pname 
AND ProductName = N'Vegie-spread' 在计算列上创建的索引将具体化为校验值列,对 ProductName 值所做的任何更改将传播到校验值列。索引也可以直接建立在索引的列上。然而,如果键值较长,则很可能不执行校验值索引甚至常规索引。 newid() 用于产生一个随机的字符串

解决方案 »

  1.   

     create function f_get
     returns varchar(100)
     as 
     begin
           declare @s varchar(100)
            select @s=
            datename(yy,getdate()) + '年' + 
            datename(mm,getdate()) + '月' + 
            datename(dd,getdate()) + '日' + 
            datename(weekday,getdate()) + 
            case when datename(hh,getdate()) < 12  then '上午' 
                 when datename(hh,getdate()) > 18  then '下午'    
                 else  '晚上' 
            end
            return @s
    end 
      

  2.   


    CHECKSUM 
    返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引。 newid() 用于产生一个随机的字符串 
      

  3.   

    create function GetRQ(@RQ datetime)
    returns varchar(50)
    as
    begin
    declare @sql varchar(50)
    select 
            @sql=datename(yy,@RQ) + '年' + 
            datename(mm,@RQ) + '月' + 
            datename(dd,@RQ) + '日' + 
            datename(weekday,@RQ) + 
            case when datename(hh,@RQ) < 12 
                      then '上午' 
              
                      
                when datename(hh,@RQ) between 12 and 18
                then '下午' 
                else  '晚上' 
                      end
    return @sql
    end
    go
    select dbo.GetRQ(getdate())
    go
    drop function GetRQ
    /*
    2009年03月17日星期二下午*/
      

  4.   


    我运行过后,二楼的你的有错误啊:
    ---------------------------------服务器: 消息 170,级别 15,状态 1,过程 f_get,行 2
    第 2 行: 'returns' 附近有语法错误。
    服务器: 消息 443,级别 16,状态 1,过程 f_get,行 7
    在函数内不正确地使用了 'getdate'。
    服务器: 消息 178,级别 15,状态 1,过程 f_get,行 16
    在此上下文中不能使用带有返回值的 RETURN 语句。
      

  5.   

    爱心觉罗大哥,在表里是实现了,但是在自定义的函数里如何来用getdate()实现啊
    下面的老师写的蛮完整的,但我想用我的方法,不能在上面直接加吗?