Inilah jawaban saya sendiri untuk pertanyaan ini (Silakan lihat juga pembaruan di akhir):
Tidak, tidak ada operator unary yang didefinisikan pada ekspresi String. Ada kemungkinan bahwa ini adalah bug.
Penjelasan:
Pernyataan yang diberikan valid dan menghasilkan hasil di bawah ini:
(No column name)
----------------
ABCDEF
(1 row(s) affected)
yang setara dengan melakukan SELECT
pernyataan tanpa menggunakan +
tanda:
SELECT 'ABCDEF'
Dikompilasi tanpa memberikan kesalahan apa pun, pada kenyataannya dieksekusi dengan sukses, memberi kesan bahwa +
beroperasi sebagai Unary
operasi pada string yang diberikan. Namun, dalam T-SQL
resmi dokumentasi, tidak disebutkan operator semacam itu. Bahkan, di bagian berjudul "Operator String
", +
muncul dalam dua operasi String yaitu + (String Concatenation)
dan += (String Concatenation)
; tetapi juga bukan Unary
operasi. Juga, di bagian berjudul "Operator Unary
", tiga operator telah diperkenalkan, hanya satu dari mereka yang + (Positive)
operator. Namun, untuk satu-satunya ini yang tampaknya relevan, segera menjadi jelas bahwa operator ini juga tidak ada hubungannya dengan nilai string non-numerik sebagai penjelasan untuk + (Positive)
operator secara eksplisit menyatakan bahwa operator ini hanya berlaku untuk nilai numerik:"Mengembalikan nilai dari ekspresi numerik (operator unary)
".
Mungkin, operator ini ada untuk berhasil menerima nilai string yang berhasil dievaluasi sebagai angka seperti yang telah digunakan di sini:
SELECT +'12345'+1
Ketika pernyataan di atas dijalankan, itu menghasilkan angka dalam output yang merupakan jumlah dari kedua string yang diberikan dievaluasi sebagai angka dan nilai numerik yang ditambahkan ke dalamnya, yaitu 1
di sini tapi itu jelas bisa menjadi jumlah lain:
(No column name)
----------------
12346
(1 row(s) affected)
Namun, saya ragu penjelasan ini benar karena menimbulkan pertanyaan di bawah ini:
Pertama, jika kita menerima bahwa penjelasan ini benar, maka kita dapat menyimpulkan bahwa ekspresi seperti +'12345'
dievaluasi menjadi angka. Jika demikian, mengapa angka-angka ini dapat muncul dalam fungsi terkait string seperti DATALENGTH
, LEN
, dll. Anda bisa melihat pernyataan seperti ini:
SELECT DATALENGTH(+'12345')
cukup valid dan hasilnya sebagai berikut:
(No column name)
----------------
5
(1 row(s) affected)
yang artinya +'12345'
sedang dievaluasi sebagai string bukan angka. Bagaimana ini bisa dijelaskan?
Kedua, sementara pernyataan serupa dengan -
operator, seperti ini:
`SELECT -'ABCDE'`
atau bahkan ini:
`SELECT -'12345'`
hasilkan kesalahan di bawah ini:
Invalid operator for data type. Operator equals minus, type equals varchar.
Mengapa, tidakkah itu menghasilkan kesalahan untuk kasus serupa ketika +
operator telah salah digunakan dengan nilai string non-numerik?
Jadi, dua pertanyaan ini mencegah saya menerima penjelasan bahwa ini adalah + (unary)
yang sama operator yang telah diperkenalkan dalam dokumentasi untuk nilai numerik. Karena tidak ada penyebutan lain di tempat lain, bisa jadi itu sengaja ditambahkan ke bahasa. Mungkin bug.
Masalahnya terlihat lebih parah ketika kita melihat tidak ada kesalahan yang dihasilkan untuk pernyataan seperti ini:
SELECT ++++++++'ABCDE'
Saya tidak tahu apakah ada bahasa pemrograman lain di luar sana yang menerima pernyataan semacam ini. Tetapi jika ada, alangkah baiknya untuk mengetahui untuk tujuan apa mereka menggunakan + (unary)
operator diterapkan ke string. Saya tidak bisa membayangkan penggunaan apa pun!
PERBARUI
Di sini dikatakan ini adalah bug di versi sebelumnya tetapi tidak akan diperbaiki karena kompatibilitas ke belakang: