为什么“SELECT ISNULL(LEFT(NULL,8),'1234567890')”的结果“返回为'1'而不是'1234567890'?

时间:2017-11-17 09:50:01

标签: sql sql-server

我有这个查询

    if let imageData = UIImageJPEGRepresentation(selectedImage, 0.2){

        let imgUid = NSUUID().uuidString

        let uploadTask = storage.reference().putData(imageData, metadata: nil) { (metadata, error) in
            guard let metadata = metadata else {
                // Uh-oh, an error occurred!
                return
            }
            // Metadata contains file metadata such as size, content-type, and download URL.
            downloadURL = metadata.downloadURL

            self.ref.child("users").child(userId).setValue([
                "username": usernameField.text,
                "userImg": downloadURL
                ])
        }
    }
}

我得到的结果是'1'而不是'1234567890'。我错过了什么?

我正在使用SQL Server 2014。

2 个答案:

答案 0 :(得分:5)

ISNULL和COALESCE之间的一个区别是ISNULL将参数的长度限制为第一个,而COALESCE则不然。尝试以下方法来了解差异

DECLARE @i AS VARCHAR(4) = NULL, 
        @j AS VARCHAR(6) = 'abcdefg' 

SELECT ISNULL(@i, @j)
SELECT COALESCE (@i, @j)

答案 1 :(得分:1)

要将结果的长度限制为您需要的8个字符

SELECT ISNULL(cast(NULL as varchar(8)), '1234567890') ;

使用第一个参数推断出ISNULL结果的数据类型。