sqlserver有没有取一个字段的中位数的函数?

解决方案 »

  1.   

    啥意思?
    取字符中间的一个字符?
    如:abcdefg,取d?
    那如果是abcd,取bc?
      

  2.   

    CREATE  TABLE tsgss(id varchar(20),a int)
    INSERT tsgss SELECT '0001',1
    UNION ALL SELECT '0002',3
    UNION ALL SELECT '0003',66
    UNION ALL SELECT '0004',34
    UNION ALL SELECT '0005',6
    UNION ALL SELECT '0006',45
    UNION ALL SELECT '0007',23
    UNION ALL SELECT '0008',33
    UNION ALL SELECT '0009',7
    UNION ALL SELECT '0010',9
    go
    CREATE   FUNCTION getMid()
    RETURNS float
    AS
    BEGIN
    DECLARE @s table(id int identity(1,1),a int)
    DECLARE @g float

    INSERT @s SELECT a FROM tsgss
    IF @@ROWCOUNT %2<>0 
    SELECT @g=a FROM @s WHERE id=(SELECT min(id)+max(id) FROM @s)/2
    ELSE
    SELECT @g=avg(a*1.0) FROM @s WHERE id in(SELECT max(id)/2 FROM @s UNION ALL SELECT max(id)/2+1 FROM @s)
    RETURN @g
    END
    SELECT dbo.getMid()
      

  3.   

    没明白中位数的意思,很有歧义啊。
    自己猜吧,是不是取字符中间的某一位数(简称中文数)?,如果是的话,使用substring就行了,
     Transact-SQL 参考  
    SUBSTRING
    返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。 语法
    SUBSTRING ( expression , start , length ) 参数
    expression是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。start是一个整数,指定子串的开始位置。length是一个整数,指定子串的长度(要返回的字符数或字节数)。说明  由于在 text 数据上使用 SUBSTRING 时 start 和 length 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。
    返回类型
    如果 expression 是支持的字符数据类型,则返回字符数据。如果 expression 是支持的 binary 数据类型,则返回二进制数据。返回字符串的类型与给定表达式的类型相同(表中显示的除外)。给定的表达式 返回类型 
    text varchar 
    image varbinary 
    ntext nvarchar 
    注释
    在字符数中必须指定使用 ntext、char 或 varchar 数据类型的偏移量(start 和 length)。在字节数中必须指定使用 text、image、binary 或 varbinary 数据类型的偏移量。 说明  兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。 
    示例
    A. 在字符串上使用 SUBSTRING
    下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。USE pubs
    SELECT au_lname, SUBSTRING(au_fname, 1, 1)
    FROM authors
    ORDER BY au_lname下面是结果集:au_lname                                   
    ---------------------------------------- - 
    Bennet                                   A 
    Blotchet-Halls                           R 
    Carson                                   C 
    DeFrance                                 M 
    del Castillo                             I 
    ...
    Yokomoto                                 A (23 row(s) affected)下例显示如何显示字符串常量 abcdef 中的第二个、第三个和第四个字符。SELECT x = SUBSTRING('abcdef', 2, 3)下面是结果集:x
    ----------
    bcd(1 row(s) affected)B. 在 text、ntext 和 image 数据上使用 SUBSTRING 
    下例显示如何从 pubs 数据库的 publishers 表内的每个 text 和 image 数据列中返回前 200 个字符。text 数据以 varchar 的形式返回,image 数据则以 varbinary 的形式返回。USE pubs
    SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo, 
       SUBSTRING(pr_info, 1, 10) AS pr_info
    FROM pub_info
    WHERE pub_id = '1756'下面是结果集:pub_id logo                   pr_info    
    ------ ---------------------- ---------- 
    1756   0x474946383961E3002500 This is sa(1 row(s) affected)