MS SQL自定义函数IsPositiveInteger

 

判断字符串是否为正整数,0开始的的数字不算。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[svf_IsPositiveInteger]
(
  @string NVARCHAR(MAX)
) RETURNS BIT  --函数返BIT数据类型,是数字返回1,非数字返回0。
AS
BEGIN
    DECLARE @rtv BIT = 1
    DECLARE @str NVARCHAR(MAX) = LTRIM(RTRIM(ISNULL(@string,'')))  --去除前后空格,如果为NULL转为''

    IF ASCII(SUBSTRING(@str, 1, 1)) = 48 --如果字符串第一位为0
    BEGIN
        SET @rtv = 0 --直接判断为非正整数
    END
    ELSE
    BEGIN
        DECLARE @start INT = 1;
        DECLARE @end INT = LEN(@str) --获取字符串长度

        WHILE (@start <= @end)  --循环字符串每一个字符
        BEGIN
            DECLARE @Numeric VARCHAR(1) = ''

            SET @Numeric = SUBSTRING(@str, @start, @start + 1) -- 每循环一次从左边获取一位字符

            IF ASCII(@Numeric) >= 48 AND ASCII(@Numeric) <= 57 --如果是数字
            BEGIN
                SET @start = @start + 1;
                CONTINUE --继续循环
            END
            ELSE
            BEGIN
                SET @rtv = 0
                BREAK  --跳出循环
            END
        END
    END
    RETURN @rtv
END

列举例子说明:

CREATE TABLE [dbo].[uTstTable] ([col1] NVARCHAR(20),[col2] NVARCHAR(20),[col3] NVARCHAR(20),[col4] NVARCHAR(20),[col5] NVARCHAR(20),[col6] NVARCHAR(20),[col7] NVARCHAR(20))
GO

INSERT INTO [dbo].[uTstTable] ([col1],[col2],[col3],[col4],[col5],[col6],[col7])
VALUES ('0.65','000435','SF46DG','3800','$54KQ','-0034','-855.4')
GO

SELECT [dbo].[svf_IsPositiveInteger] ([col1]) AS [col1],
[dbo].[svf_IsPositiveInteger] ([col2]) AS [col2],
[dbo].[svf_IsPositiveInteger] ([col3]) AS [col3],
[dbo].[svf_IsPositiveInteger] ([col4]) AS [col4],
[dbo].[svf_IsPositiveInteger] ([col5]) AS [col5],
[dbo].[svf_IsPositiveInteger] ([col6]) AS [col6],
[dbo].[svf_IsPositiveInteger] ([col7]) AS [col7]
FROM [dbo].[uTstTable]
GO

MS SQL自定义函数IsNumeric

 

判断字符串是否为纯数字,负数不算。如'00012','54585','1000'

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[svf_IsNumeric]
(
  @string NVARCHAR(MAX)
) RETURNS BIT  --函数返BIT数据类型,是数字返回1,非数字返回0。
AS
BEGIN
    DECLARE @rtv BIT = 1
    DECLARE @str NVARCHAR(MAX) = LTRIM(RTRIM(ISNULL(@string,''))) --去除前后空格,如果为NULL转为''

    DECLARE @start INT = 1;
    DECLARE @end INT = LEN(@str) --获取字符串长度

    WHILE (@start <= @end)  --循环字符串每一个字符
    BEGIN
        DECLARE @Numeric VARCHAR(1) = ''

        SET @Numeric = SUBSTRING(@str, @start, @start + 1) -- 每循环一次,从左边获取一位字符

        IF ASCII(@Numeric) >= 48 AND ASCII(@Numeric) <= 57  --如果是数字
        BEGIN
            SET @start = @start + 1;
            CONTINUE  --继续循环
        END
        ELSE
        BEGIN
            SET @rtv = 0
            BREAK  --跳出循环
        END
    END

    RETURN @rtv
END

创建一个例子来演示:

CREATE TABLE [dbo].[uTable] ([col1] NVARCHAR(20),[col2] NVARCHAR(20),[col3] NVARCHAR(20),[col4] NVARCHAR(20),[col5] NVARCHAR(20),[col6] NVARCHAR(20),[col7] NVARCHAR(20))
GO

INSERT INTO [dbo].[uTable] ([col1],[col2],[col3],[col4],[col5],[col6],[col7])
VALUES ('0.455','000435','SF46DG','4000','$%9KJ','-0034','-8554')
GO

SELECT [dbo].[svf_IsNumeric] ([col1]) AS [col1],
[dbo].[svf_IsNumeric] ([col2]) AS [col2],
[dbo].[svf_IsNumeric] ([col3]) AS [col3],
[dbo].[svf_IsNumeric] ([col4]) AS [col4],
[dbo].[svf_IsNumeric] ([col5]) AS [col5],
[dbo].[svf_IsNumeric] ([col6]) AS [col6],
[dbo].[svf_IsNumeric] ([col7]) AS [col7]
FROM [dbo].[uTable]
GO

水晶报表使用IEnumerable<T>数据源

 

这篇我们学习水晶报表,报表呈现的数据源是IEnumerable<T>。比如下面的数据:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Insus.NET.Models;

namespace Insus.NET.Entities
{
    public class MachineEntity
    {
        public IEnumerable<Machine> Machines()
        {
            return new List<Machine>()
            {
                { new Machine() {
                    Key =1,
                    ModelNumber ="TC03Q",
                    Brand ="QT",
                    ManufactureDate = Convert.ToDateTime("2008/12/31")}
                },
                { new Machine() {
                    Key =2,
                    ModelNumber ="MH26U",
                    Brand ="HW",
                    ManufactureDate = Convert.ToDateTime("2012/03/09")}
                },
                { new Machine() {
                    Key =3,
                    ModelNumber ="DW569",
                    Brand ="XM",
                    ManufactureDate = Convert.ToDateTime("2015/07/25")}
                }
            };
        }
    }
}

新建水晶报表:

按Next铵钮,略过Group By。

铵Next铵钮,略过Filter Fields。

报表创建OK。

根据这篇《ASP.NET MVC项目实现BasePage基类用作ASPX.CS网页继承https://www.cnblogs.com/insus/p/9865023.html

我们还得在BasePage基类中,重载另一个方法:

在.aspx.cs网页中,就可以使用上面的方法:

程序运行:

学习完毕。

希望对你有所帮助。

MS SQL自定义函数IsPositiveInteger MS SQL自定义函数IsNumeric 水晶报表使用IEnumerable<T>数据源的更多相关文章

  1. SQL Server编程(02)自定义函数

    在编程过程中,我们通常把特定的功能语句块封装称函数,方便代码的重用.我们可以在SQL Server中自定义函数,根据函数返回值的区别,我们自定义的函数分两种:标量值函数和表值函数. 自定义函数的优点: ...

  2. SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析

    前阵子遇到一个很是棘手的问题,监控系统DPA发现某个自定义标量函数被调用的次数非常高,高到一个离谱的程度.然后在Troubleshooting这个问题的时候,确实遇到了一些问题让我很是纠结,下文是解决 ...

  3. mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数

    在做项目的时候需要些分页,用的数据库是MySQL,之前看到的参考例子是用MS SQL做的,在MS SQL.Oracle里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...

  4. 自定义函数导致的sql性能问题

    同事说,某某报表跑的很慢,让我调查一下 优化前:该报表整体需要跑4小时以上. sql代码如下 SELECT /*省略多数查询字段*/ REP_FUN_REFCODEVALUE /*自定义函数*/ (P ...

  5. 自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

  6. sql server函数(isnull,charindex,cast,自定义函数)

    SELECT charindex( CAST ( dbo.ufn_IsNullOrEmpty ('109722A3-622D-4FD4-A060-0287C933A89E', a.OUID) AS V ...

  7. mybatis自定义插件动态修改sql语句

    step1:定义Interceptor实现org.apache.ibatis.plugin.Interceptor import org.apache.commons.logging.Log; imp ...

  8. MS SQL Server迁移至Azure SQL(官方工具)

    前面,我有尝试过将MS SQL Server数据数据迁移至Azure SQL,请参考<MS SQL Server迁移至Azure SQL>,使用的是第三方工具,但现在官方更新了工具,我们尝 ...

  9. SQL关于分页的sql查询语句 limit 和row_number() OVER函数

    在做项目的时候需要些分页,用的数据库是mysql,之前看到的参考例子是用MS SQL做的,在MS SQL.ORACLE里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...

随机推荐

  1. java类中属性的加载顺序,以及内存分配情况介绍

    看下面例子及说明: /** 假如有外部类调用了该类,代码为:new StaticTest(); 那么下面是类属性的加载顺序 */ public class StaticTest{ public int ...

  2. 使用Win2D在UWP程序中2D绘图(二)

    绘制API 首先还是看一下前文的的示例: args.DrawingSession.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);    args.Dra ...

  3. 在雇员表中查找第二高的工资SQL语句助记

            "在雇员表中查找第二高的工资的员工记录"SQL语句怎么写         这个查询首先查找最高工资,然后将它从列表中排除.再查找最高工资. 非常明显,第二次返回的是 ...

  4. Openshift 和Harbor的集成

    1.安装配置Harbor 环境rhel 7.6 安装docker,python 安装docker-compose sudo curl -L https://github.com/docker/comp ...

  5. Python学习(五)函数 —— 自定义函数

    Python 自定义函数 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print()等.也可以创建用户自定义函数. 函数定义 函数定义的简单规则: 函数代码块以de ...

  6. Perl &amp; Python编写CGI

    近期偶然玩了一下CGI,收集点资料写篇在这里留档. 如今想做HTTP Cache回归測试了,为了模拟不同的响应头及数据大小.就须要一个CGI按须要传回指定的响应头和内容.这是从老外的測试页面学习到的经 ...

  7. Unity的shader学习2

    下面继续看基于surface的shader代码,基本与Vertex&Fragment shader差不多,只是不能写pass,然后只需要声明surface函数,就能处理所有的事情. Shade ...

  8. 一个table插件,用于bootstrap开发

    最近项目中改用bootstrap,可以给的通用table,写的有点死,id名称是固定的,那一个页面两个table如何做呢? ok,模仿着别人的代码,写了一个,整体代码如下: ; (function(f ...

  9. Orchard运用 - 导入旧随笔导致归档的问题

    归档功能对于一个博客App这应该必须有的需求,故此Orchard中博客模块默认实现这一特性并通过一个叫"Blog Archives" widget, 你可以将其安装博客主页的侧边栏 ...

  10. ZeroClipboard及其原理介绍

    系列教程地址:http://www.365mini.com/page/zeroclipboard-2_x-quick-start.htm ZeroClipboard 是国外大神开发的一个用于剪贴板复制 ...