精华内容
下载资源
问答
  • 一、常见需求1,拼接同1行的不同列 1、CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值...若要避免这种情况,使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col ...

    一、常见需求1,拼接同1行的不同列

    1、CONCAT(str1,str2,…)                        
    返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

    mysql> SELECT CONCAT(’My’, ‘S’, ‘QL’);

    -> ‘MySQL’

     

    2、CONCAT_WS(separator,str1,str2,…) 
    CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。   第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

    mysql> SELECT CONCAT_WS(’,',’First name’,'Second name’,'Last Name’);

    -> ‘First name,Second name,Last Name’

     

    二、常见需求2,拼接同1列的不同行

     

    1、先查询出来行数,方便验证

    select id,username from xx
    where period_id = 137 and is_deleted=0;

    (之前经常先查询出来,再用Notepade多行操作,用,拼起来,太慢了)

     

     

    2、先分组,再用group_concat拼接(默认用英文,拼起来了)
    select group_concat(username) from xx
    where period_id = 137
    group by period_id;

     

     

    三、终极版本

    select group_concat(CONCAT("'",username,"'")) from xx

        where period_id = 137

        group by period_id;

     

    得到这样的 同一列的字符串拼接,'amin.x','x.li','x.liu'

     

    update x set period_id = 137
    where is_deleted=0 and username in( 字符串拼接);

    展开全文
  • 数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型 整型: 浮点型: 日期时间型: 注:实际开发过程中日期时间类型用的比较少,采用数字类型取代...

    本系列博客参照慕课网《与MySQL的零距离接触触》教学视频所编写

    1、数据类型

    数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型

    整型:

    浮点型:

    日期时间型:

    注:实际开发过程中日期时间类型用的比较少,采用数字类型取代日期时间型

    字符型:

    注:M为指定长度,指定这个字段中可输入的最长长度为多少;CHAR(M)中若填写的字符没达到指定长度,则系统会用空格补齐

    2、数据表

    数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础

    打开数据库:USE 数据库名称;

    查看当前所打开的数据库:SELECT DATABASE();

    创建数据表:CREATE TABLE [IF NOT EXISTS] table_name (column_name data_type,...);

    查看数据表列表:SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr];

    查看数据表结构:SHOW COLUMNS FROM tbl_name;

    插入记录:INSERT [INTO] tbl_name[(col_name, ...)] VALUES(val, ...);

    记录查找:SELECT expr,... FROM tbl_name;        * 表示字段的过滤

    空值与非空:NULL,字段值可以为空;NOT NULL,字段值禁止为空

    AUTO_INCREMENT:自动编号,且必须与主键组合使用;默认情况下,起始值为1,每次的增量为1;自动编号可以为浮点数,但小数位数必须为0

    PRIMARY KEY:主键约束;每张数据表只能存在一个主键;主键保证记录的唯一性;主键自动为NOT NULL

    UNIQUE KEY:唯一约束;唯一约束可以保证记录的唯一性;唯一约束的字段可以为空值(NULL),但也只能有一个空值;每张数据表可以存在多个唯一约束

    DEFAULT:默认值;当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

    CREATE TABLE tb(
    id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20) NOT NULL UNIQUE KEY,
    sex ENUM('1', '2', '3') DEFAULT '3'
    );

     

    展开全文
  • 若我们在Main()函数中,调用Test()函数,我们管Main...文章目录1、out参数2、ref参数3、params参数 1、out参数 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同..
    • 若我们在Main()函数中,调用Test()函数,我们管Main()函数叫 调用者,管Test()函数叫 被调用者

    • 如果 被调用者 想要得到 调用者 的值:

      1. 传递参数。
      2. 定义全局变量,使用静态字段来模拟全局变量。public static int num = 2;
    • 如果 调用者 想要得到 被调用者 的值:

      1. 返回值

    1、out参数

    如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们可以考虑使用out参数。
    out参数就侧重于在一个方法中可以返回多个不同类型的值。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace FunctionParameters
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
                // 调用1
                Console.WriteLine("调用1:");
                int[] res = GetMaxMinSumAvg(numbers);
                Console.WriteLine("最大值是{0},最小值是{1},总和是{2},平均值是{3}", res[0], res[1], res[2], res[3]);
                Console.ReadKey();
                // 调用2
                Console.WriteLine("调用2:");
                int max;
                int min;
                int sum;
                int avg;
                bool b;
                string s;
                GetMaxMinSumAvg(numbers, out max, out min, out sum, out avg, out b, out s);
                Console.WriteLine("最大值是{0},最小值是{1},总和是{2},平均值是{3}", max, min, sum, avg);
                Console.WriteLine(b);
                Console.WriteLine(s);
                Console.ReadKey();
                // 调用3
                Console.WriteLine("调用3:");
                int num;
                //bool buer = int.TryParse("3.14a", out num);  // 也可
                bool buer = MyTryParse("3.14a", out num);
                Console.WriteLine(num);
                Console.WriteLine(buer);
                Console.ReadKey();
            }
            /// <summary>
            /// 计算一个整数数组的最大值、最小值、平均值、总和
            /// </summary>
            /// <param name="nums">需要计算的数组</param>
            /// <returns>计算结果,res[0] 最大值  res[1]最小值  res[2]总和  res[3]平均值</returns>
            public static int[] GetMaxMinSumAvg(int[] nums)
            {
                int[] res = new int[4];
                res[0] = nums[0];        //max
                res[1] = nums[0];        //min
                res[2] = 0;                  //sum
                for (int i = 0; i < nums.Length; i++)
                {
                    if (nums[i] > res[0])
                    {
                        res[0] = nums[i];
                    }
                    if (nums[i] < res[1])
                    {
                        res[1] = nums[i];
                    }
                    res[2] += nums[i];
                }
                res[3] = res[2] / nums.Length;
                return res;
            }
            /// <summary>
            /// 计算一个整数数组的最大值、最小值、平均值、总和
            /// </summary>
            /// <param name="nums">需要计算的数组</param>
            /// <param name="max">多余返回的最大值</param>
            /// <param name="min">多余返回的最小值</param>
            /// <param name="sum">多余返回的总和</param>
            /// <param name="avg">多余返回的平均值</param>
            /// <param name="b">多余返回的布尔值</param>
            /// <param name="str">多余返回的字符串</param>
            public static void GetMaxMinSumAvg(int[] nums, out int max, out int min, out int sum, out int avg, out bool b, out string str)
            {
                // out参数要求在方法的内部必须为其赋值
                max = nums[0];
                min = nums[0];
                sum = 0;
                for (int i = 0; i < nums.Length; i++)
                {
                    if (nums[i] > max)
                    {
                        max = nums[i];
                    }
                    if (nums[i] < min)
                    {
                        min = nums[i];
                    }
                    sum += nums[i];
                }
                avg = sum / nums.Length;
                b = true;
                str = "计算完成。";
            }
            /// <summary>
            /// 演示out用法:字符串转int
            /// </summary>
            public static bool MyTryParse(string s, out int result)
            {
                result = 0;
                try
                {
                    result = Convert.ToInt32(s);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }
    }
    
    

    2、ref参数

    能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
    ref参数要求在方法外必须为其赋值,而方法内可以不赋值。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace FunctionParameters
    {
        class Program
        {
            static void Main(string[] args)
            {
                int n1 = 2;
                int n2 = 3;
                Console.WriteLine("n1={0},n2={1}", n1,n2);
                ExchangeValue(ref n1, ref n2);
                Console.WriteLine("n1={0},n2={1}", n1, n2);
                Console.ReadKey();
    
            }
            /// <summary>
            /// 交换两个数字的值
            /// </summary>
            public static void ExchangeValue(ref int n1, ref int n2)
            {
                // 方法1
                //int temp = n1;
                //n1 = n2;
                //n2 = temp;
                // 方法2
                n1 = n1 - n2;
                n2 = n1 + n2;
                n1 = n2 - n1;
            }
        }
    }
    

    3、params可变参数

    将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
    params可变参数必须是形参列表中的最后一个元素。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace FunctionParameters
    {
        class Program
        {
            static void Main(string[] args)
            {
                Test("张三", "2020001", 100, 100, 100);
                int[] s = { 99, 88, 77 };
                Test("张三", "2020001", s);
                Console.ReadKey();
            }
            public static void Test(string name, string id, params int[] score)
            {
                int sum = 0;
                for (int i = 0; i < score.Length; i++)
                {
                    sum += score[i];
                }
                Console.WriteLine("{0}的学号是{1},这次考试的总成绩是{2}", name, id, sum);
            }
        }
    }
    
    
    展开全文
  • 但“很多时候”不代表“所有时候”,有些时候还得量力而为,例如需要大量进行函数参数传递或返回的时候,老是这样进行字段拷贝,其实反而会 降低应用程序性能。另外,如果实例会被频繁地用于Hashtable或者ArrayList...
  • 当数组中元素为 数字类型 时,排序结果我们设想的完全不同,因为默认是按照字符编码的顺序进行排序的。 解决方案:sort() 方法接收一个参数(此参数必须是函数),我们可以自己定义排序规则,如下图 二. 对 ...
  • .NET、JAVA等编程语言有确定类型不同,JavaScript这类脚本语言输入参数并没有明确的类型,如果获取失败会返回undefined,当输入参数有多个字段时,单纯依靠传统判断方式不仅麻烦而且容易遗漏不容易维护,故而将...

    在使用restify实现webapi时常常会遇到获取和验证请求参数的问题,与.NET、JAVA等编程语言有确定类型不同,JavaScript这类脚本语言输入参数并没有明确的类型,如果获取失败会返回undefined,当输入参数有多个字段时,单纯依靠传统判断方式不仅麻烦而且容易遗漏不容易维护,故而将验证流程统一成为可复用方法是比较好的选择。

    首先需要定义输入参数的范围,即输入参数的格式。一般情况下,我们采用application/json格式。以用户注册为例,以下罗列一些用户注册时的参数:

    const defaultParams = {
      username: {
        type: 'string',
        required: true,
      }, // 用户名
      password: {
        type: 'string', allowNull: true,
      }, // 密码MD5格式
      mobile: { type: 'string', allowNull: true }, // 手机号
      email: { type: 'string', allowNull: true }, // 邮箱
      gender: {
        type: 'int',
        allowNull: true,
        validate: src => [0, 1, 2].indexOf(src) >= 0,
      }, // 性别(0-未知,1-男,2-女)
      birthday: { type: 'datetime', allowNull: true }, // 生日
      zipcode: { type: 'string', allowNull: true }, // 邮编
      nickname: { type: 'string', allowNull: true } // 昵称
    };
    

    其中type字段类型,allowNull是否允许字段缺失,required是否必要,validate验证条件。下面就要从post数据体内获取需要的数据。

    const getParams = (params, defaultParams) => {
      const result = {};
      const keys = Object.keys(defaultParams);
      for (let i = 0, len = keys.length; i < len; i += 1) {
        result[keys[i]] = typeof params[keys[i]] === 'string' ? params[keys[i]].trim() : params[keys[i]];
      }
      return result;
    };
    

    获取数据后就可以进行验证了,我们可以对于不同的数据类型进行统一的处理。

    const validate = {
      string: src => (typeof src === 'string'),
      int: src => (typeof src === 'number' && src % 1 === 0),
      float: src => (typeof src === 'number'),
      datetime: (src) => {
        const time = moment(src, dateFormat);
        const result = validate.string(src)
          && time.isValid()
          && time.format(dateFormat).split(' ').join('') === src.split(' ').join('');
        return result;
      },
      mobile: (src) => {
        const reg = /^1[3|4|5|7|8][0-9]{9}$/;
        const result = validate.string(src) && reg.test(src);
        return result;
      },
      email: src => (validate.string(src) && validator.isEmail(src)),
    };
     
    
    
    const validateParams = (params, paramsTemplate) => {
      let errCode = rtCode.paramsErr;
      const keys = Object.keys(paramsTemplate);
      for (let i = 0, len = keys.length; i < len; i += 1) {
        if (paramsTemplate[keys[i]].required) {
          if (params[keys[i]] === undefined || params[keys[i]] === null) {
            return { errCode: rtCode.dataLost, msg: `${keys[i]} is required.` };
          }
          if (params[keys[i]] === '') {
            errCode = paramsTemplate[keys[i]].errCode || rtCode.paramsErr;
            return { errCode, msg: `${keys[i]} can't be empty string.` };
          }
        }
        if (params[keys[i]] !== undefined) {
          if (
            !(paramsTemplate[keys[i]].allowNull && params[keys[i]] === null)
            && !validate[paramsTemplate[keys[i]].type](params[keys[i]])
          ) {
            return { errCode, msg: `${keys[i]} must is ${paramsTemplate[keys[i]].type}.` };
          }
          if (
            !(paramsTemplate[keys[i]].allowNull && params[keys[i]] === null)
            && paramsTemplate[keys[i]].validate
            && !paramsTemplate[keys[i]].validate(params[keys[i]])
          ) {
            errCode = paramsTemplate[keys[i]].errCode || rtCode.paramsErr;
            return { errCode, msg: `${keys[i]} is not match.` };
          }
        }
      }
      return { errCode: rtCode.success };
    };
    

    好了,以上就完成所有的验证步骤了。

    本文地址:https://www.linuxprobe.com/?p=127631

    展开全文
  • js json数组按某一字段排序

    千次阅读 2017-06-23 14:58:50
    当数组中元素为 数字类型 时,排序结果我们设想的完全不同,因为默认是按照字符编码的顺序进行排序的。 解决方案:sort() 方法接收一个参数(此参数必须是函数),我们可以自己定义排序规则,如下图
  • 解决思路分条存储,即多条数据前n个字段一致,最后内容字段不同,下方代码高效利用数据库空间!代码如下public class StringSavingUtils {/*** 根据参数length,将String类型对象,进行截取* 用于将长字符串,存入...
  • 委托事件的关系

    2015-03-28 23:52:00
     委托事件的关系,参照字段跟属性的关系来理解。  属性的一个功能就是设置字段,可以给字段设置权限。字段可以是值类型,也可以是引用类型,当然包括数组在内。那么委托呢?委托是把方法参数化,想要使用方法...
  • 2、增加了“验证输入的数字是否在其类型的取值范围内”函数,使用枚举类型数据和Switch Case为不同取值范围的整型数据输出验证提示信息(2011-11-4) 3、修改了弹出对话框向数据库提交类型数据(2011-11-4) 4、对...
  • 说明: 指定一个字符串值, 设置 TIME 数据类型的默认值, 该数据类型包含 HOUR, MINUTE 和 SECOND 这几个日期时间字段。 语法: TIME '09:26:50' (将值存储为 7 个字节)。 默认值: 从 NLS_TERRITORY 中获得 nls_time...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 540
精华内容 216
关键字:

参数类型可与字段类型不同